مبدل آنالوگ به دیجیتال ARM

مبدل آنالوگ به دیجیتال(سنسور دما)


خلاصه

در این آموزش با واحد ADC میکروکنترلر آشنا می شویم. سپس از سنسور دمای آنالوگ LM35 موجود بر روی برد آموزشی استفاده می کنیم و در قالب یک پروژه مقدار خوانده شده از واحد ADCرا به رایانه ارسال می کنیم. همچنین دمای محیط را در قالب یک BAR LED روی LED های برد آموزشی نشان می دهیم.



مشاهده ویدیو



ایجاد پروژه در نرم افزار کیوب




 



در نرم افزار Keil می توان از قسمت Application/User به برنامه اصلی دسترسی داشت



تشریح کد برنامه


هدرفایل های مورد نیاز پروژه


[pastacode lang=”c” manual=”%2F*%20Includes%20——————————————————————*%2F%0A%23include%20%22main.h%22%0A%23include%20%22stm32f1xx_hal.h%22″ message=”” highlight=”” provider=”manual”/]


پیش تعریف توابع ایجاد شده توسط نرم افزار کیوب


[pastacode lang=”c” manual=”%2F*%20Private%20function%20prototypes%20———————————————–*%2F%0Avoid%20SystemClock_Config(void)%3B%0Astatic%20void%20MX_GPIO_Init(void)%3B%0Astatic%20void%20MX_ADC1_Init(void)%3B%0Astatic%20void%20MX_USART2_UART_Init(void)%3B” message=”” highlight=”” provider=”manual”/]


متغیرهای مورد استفاده در برنامه

[pastacode lang=”c” manual=”%2F*%20Private%20variables%20———————————————————*%2F%0AADC_HandleTypeDef%20hadc1%3B%0A%0AUART_HandleTypeDef%20huart2%3B%0A%0A%2F*%20USER%20CODE%20BEGIN%20PV%20*%2F%0A%2F*%20Private%20variables%20———————————————————*%2F%0Auint16_t%20adcValue%3D0%3B%0Achar%20buffer%5B20%5D%3B%0A%2F*%20USER%20CODE%20END%20PV%20*%2F” message=”” highlight=”” provider=”manual”/]


جزئیات تابع MX_GPIO_Init


[pastacode lang=”c” manual=”%2F**%20Configure%20pins%20as%20%0A%20%20%20%20%20%20%20%20*%20Analog%20%0A%20%20%20%20%20%20%20%20*%20Input%20%0A%20%20%20%20%20%20%20%20*%20Output%0A%20%20%20%20%20%20%20%20*%20EVENT_OUT%0A%20%20%20%20%20%20%20%20*%20EXTI%0A*%2F%0Astatic%20void%20MX_GPIO_Init(void)%0A%7B%0A%0A%20%20GPIO_InitTypeDef%20GPIO_InitStruct%3B%0A%0A%20%20%2F*%20GPIO%20Ports%20Clock%20Enable%20*%2F%0A%20%20__HAL_RCC_GPIOC_CLK_ENABLE()%3B%0A%20%20__HAL_RCC_GPIOA_CLK_ENABLE()%3B%0A%20%20__HAL_RCC_GPIOD_CLK_ENABLE()%3B%0A%0A%20%20%2F*Configure%20GPIO%20pin%20Output%20Level%20*%2F%0A%20%20HAL_GPIO_WritePin(GPIOC%2C%20GPIO_PIN_2%7CGPIO_PIN_3%7CGPIO_PIN_4%7CGPIO_PIN_5%2C%20GPIO_PIN_RESET)%3B%0A%0A%20%20%2F*Configure%20GPIO%20pins%20%3A%20PC2%20PC3%20PC4%20PC5%20*%2F%0A%20%20GPIO_InitStruct.Pin%20%3D%20GPIO_PIN_2%7CGPIO_PIN_3%7CGPIO_PIN_4%7CGPIO_PIN_5%3B%0A%20%20GPIO_InitStruct.Mode%20%3D%20GPIO_MODE_OUTPUT_PP%3B%0A%20%20GPIO_InitStruct.Speed%20%3D%20GPIO_SPEED_FREQ_LOW%3B%0A%20%20HAL_GPIO_Init(GPIOC%2C%20%26GPIO_InitStruct)%3B%0A%0A%7D” message=”” highlight=”” provider=”manual”/]


جزئیات تابع MX_ADC1_Init

[pastacode lang=”c” manual=”%2F*%20ADC1%20init%20function%20*%2F%0Astatic%20void%20MX_ADC1_Init(void)%0A%7B%0A%0A%20%20ADC_ChannelConfTypeDef%20sConfig%3B%0A%0A%20%20%20%20%2F**Common%20config%20%0A%20%20%20%20*%2F%0A%20%20hadc1.Instance%20%3D%20ADC1%3B%0A%20%20hadc1.Init.ScanConvMode%20%3D%20ADC_SCAN_DISABLE%3B%0A%20%20hadc1.Init.ContinuousConvMode%20%3D%20DISABLE%3B%0A%20%20hadc1.Init.DiscontinuousConvMode%20%3D%20DISABLE%3B%0A%20%20hadc1.Init.ExternalTrigConv%20%3D%20ADC_SOFTWARE_START%3B%0A%20%20hadc1.Init.DataAlign%20%3D%20ADC_DATAALIGN_RIGHT%3B%0A%20%20hadc1.Init.NbrOfConversion%20%3D%201%3B%0A%20%20if%20(HAL_ADC_Init(%26hadc1)%20!%3D%20HAL_OK)%0A%20%20%7B%0A%20%20%20%20_Error_Handler(__FILE__%2C%20__LINE__)%3B%0A%20%20%7D%0A%0A%20%20%20%20%2F**Configure%20Regular%20Channel%20%0A%20%20%20%20*%2F%0A%20%20sConfig.Channel%20%3D%20ADC_CHANNEL_10%3B%0A%20%20sConfig.Rank%20%3D%201%3B%0A%20%20sConfig.SamplingTime%20%3D%20ADC_SAMPLETIME_1CYCLE_5%3B%0A%20%20if%20(HAL_ADC_ConfigChannel(%26hadc1%2C%20%26sConfig)%20!%3D%20HAL_OK)%0A%20%20%7B%0A%20%20%20%20_Error_Handler(__FILE__%2C%20__LINE__)%3B%0A%20%20%7D%0A%0A%7D” message=”” highlight=”” provider=”manual”/]

تابع main



[pastacode lang=”c” manual=”int%20main(void)%0A%7B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%201%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%201%20*%2F%0A%0A%20%20%2F*%20MCU%20Configuration———————————————————-*%2F%0A%0A%20%20%2F*%20Reset%20of%20all%20peripherals%2C%20Initializes%20the%20Flash%20interface%20and%20the%20Systick.%20*%2F%0A%20%20HAL_Init()%3B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%20Init%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%20Init%20*%2F%0A%0A%20%20%2F*%20Configure%20the%20system%20clock%20*%2F%0A%20%20SystemClock_Config()%3B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%20SysInit%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%20SysInit%20*%2F%0A%0A%20%20%2F*%20Initialize%20all%20configured%20peripherals%20*%2F%0A%20%20MX_GPIO_Init()%3B%0A%20%20MX_ADC1_Init()%3B%0A%20%20MX_USART2_UART_Init()%3B%0A%0A%20%20%2F*%20USER%20CODE%20BEGIN%202%20*%2F%0A%0A%20%20%2F*%20USER%20CODE%20END%202%20*%2F” message=”” highlight=”” provider=”manual”/]


روتین اجرای برنامه


[pastacode lang=”c” manual=”%20%20%2F*%20Infinite%20loop%20*%2F%0A%20%20%2F*%20USER%20CODE%20BEGIN%20WHILE%20*%2F%0A%20%20while%20(1)%0A%20%20%7B%0A%20%20%2F*%20USER%20CODE%20END%20WHILE%20*%2F%0A%09%0A%20%20%2F*%20USER%20CODE%20BEGIN%203%20*%2F%0A%09HAL_Delay(200)%3B%09%0A%09HAL_ADC_Start(%26hadc1)%3B%0A%09HAL_ADC_PollForConversion(%26hadc1%2C10)%3B%0A%09adcValue%3DHAL_ADC_GetValue(%26hadc1)%3B%0A%09HAL_ADC_Stop(%26hadc1)%3B%0A%09sprintf(buffer%2C%22Temper%20is%3A%25d%5Cr%5Cn%22%2CadcValue)%3B%09%0A%09HAL_UART_Transmit(%26huart2%2C(uint8_t*)%20buffer%2C20%2C10)%3B%0A%09if%20(adcValue%3C1000)%7B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_5%2CGPIO_PIN_SET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_4%2CGPIO_PIN_RESET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_3%2CGPIO_PIN_RESET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_2%2CGPIO_PIN_RESET)%3B%0A%09%09%0A%09%7D%09%0A%09else%20if(adcValue%3C2000)%7B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_5%2CGPIO_PIN_SET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_4%2CGPIO_PIN_SET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_3%2CGPIO_PIN_RESET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_2%2CGPIO_PIN_RESET)%3B%09%0A%09%7D%09%0A%09else%20if(adcValue%3C3000)%7B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_5%2CGPIO_PIN_SET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_4%2CGPIO_PIN_SET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_3%2CGPIO_PIN_SET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_2%2CGPIO_PIN_RESET)%3B%09%0A%09%7D%09%0A%09else%7B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_5%2CGPIO_PIN_SET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_4%2CGPIO_PIN_SET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_3%2CGPIO_PIN_SET)%3B%0A%09HAL_GPIO_WritePin(GPIOC%2CGPIO_PIN_2%2CGPIO_PIN_SET)%3B%09%0A%09%7D%09%0A%20%20%7D%0A%20%20%2F*%20USER%20CODE%20END%203%20*%2F” message=”” highlight=”” provider=”manual”/]



پروژه ADC سنسور دماLM35
کانال تلگرام نامینیک

گروه تلگرام نامینیک ARM STM32


Tags: , , , , , ,