سلام
یه مشکل با ADC پیدا کردم ممنون میشم راهنمایی کنید.
میخوام دما رو از طریق سنسور دمای lm35 روی السیدی نمایش بدم .(از برد مینی فروشگاه استفاده میکنم)خود سنسور رو با اسکوپ تست کردم تو دمای معمولی 200 میلی ولت نشون میداد و وقتی دستم رو روش میگیرم به 300 میلی ولت میرسه.
ولی وقتی من برنامه نویسی میکنم که مقدار ولتاژ سنسور توسط ADC با استفاده از فرمول زیر به میلی ولت تبدیل بشه و روی السیدی نمایش داده بشه عدد 2550 به بالا روی السیدی نشون داده میشه و هی تغییر میکنه وقتی هم دستم رو میگیرم روی سنسور تغییرات محسوسی نمیبینم و این یعنی پروژه دماسنجم کار نمیکنه .ایراد کار کجا میتونه باشه؟چطوری برطرفش کنم ؟
(وقتی پایه ADC رو به گراند وصل میکنم عدد صفر روی السیدی نشون داده میشه و وقتی به تغذیه وصل میکنم 3299)
main برنامه :
یه مشکل با ADC پیدا کردم ممنون میشم راهنمایی کنید.
میخوام دما رو از طریق سنسور دمای lm35 روی السیدی نمایش بدم .(از برد مینی فروشگاه استفاده میکنم)خود سنسور رو با اسکوپ تست کردم تو دمای معمولی 200 میلی ولت نشون میداد و وقتی دستم رو روش میگیرم به 300 میلی ولت میرسه.
ولی وقتی من برنامه نویسی میکنم که مقدار ولتاژ سنسور توسط ADC با استفاده از فرمول زیر به میلی ولت تبدیل بشه و روی السیدی نمایش داده بشه عدد 2550 به بالا روی السیدی نشون داده میشه و هی تغییر میکنه وقتی هم دستم رو میگیرم روی سنسور تغییرات محسوسی نمیبینم و این یعنی پروژه دماسنجم کار نمیکنه .ایراد کار کجا میتونه باشه؟چطوری برطرفش کنم ؟
(وقتی پایه ADC رو به گراند وصل میکنم عدد صفر روی السیدی نشون داده میشه و وقتی به تغذیه وصل میکنم 3299)
کد:
;uint32_t T,a ;(a = ADC_GetConversionValue(ADC1 ;T=(a*3300)/4096
کد:
#include "stm32f10x.h" #include "lcd4bit.h" #include "stdio.h" void Delay(__IO uint32_t num) { __IO uint32_t index = 0; /* default system clock is 72MHz */ for(index = (72000 * num); index != 0; index--) { } } __IO uint32_t ADCConvertedValue; void GPIO_Configuration(void); //*********************************MAIN************************************// int main(void) { ADC_InitTypeDef ADC_InitStructure; char s[16]; uint32_t T,a; GPIO_Configuration(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_13Cycles5); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (1) { a = ADCConvertedValue; T=(a*3300)/4096; lcd_init(); { sprintf(s,"input:%d mv",T); set_cursor(1,1); lcd_putsf(s); Delay(50); } } } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; // A0->analog input for ADC ch1-->LM35 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); } //********************************************************************
دیدگاه