7位格雷码计算风向_电子技术综合训练课程设计报告_风速与风向的测量.doc

电子技术综合训练课程设计报告_风速与风向的测量

电子技术综合训练

设计报告

题目:风速与风向的测量

姓名:

学号:

班级: 电气二班

同组成员:

指导教师:

日期: 2011年12月28日

(二)摘要

利用已有的电子技术知识,设计风速和风向测量的电子线路。霍尔磁敏原件感应出的信号是正弦波信号,我们需设计一个整形电路,将该正弦波信号转化为同频率的方波信号作为被测脉冲,然后测量出该信号在0.1S中的频率即为风速。

风向用七位二进制码表示,通过电子线路上的发光二极管可以直观的读出与当前风向对应的一组七位二进制码,然后通过查表最终确定风向。风速测量电路和风向测量电路工作正常,性能稳定,达到了预期结果。这说明这个设计方案思路正确,可行性较高。

关键字:风速风向测量 时基电路 锁存 计数

(三)目录

1 设计任务和要求…………………………………………………………

1.1设计任务……………………………………………………………

1.2设计要求……………………………………………………………

2 系统设计…………………………………………………………………

2.1系统要求……………………………………………………………

2.2系统工作原理……………………………………………………………

2.3方案设计………………………………………………………

3 单元电路设计……………………………………………………………

3.1 单元电路A(单元电路的名称) ……………………………………

3.1.1电路结构及工作原理…………………………………………

3.1.2电路仿真…………………………………………………………

3.1.3元器件的选择及参数确定……………………………………………

3.2单元电路B(单元电路的名称) ……………………………………

3.2.1电路结构及工作原理……………………………………………

3.2.2电路仿真…………………………………………………………

3.2.3元器件的选择及参数确定………………………………………………

4 系统仿真……………………………………………………………………

5 电路安装、调试与测试……………………………………………………

5.1电路安装………………………………………………………………

5.2电路调试………………………………………………………………

5.3系统功能及性能测试…………………………………………………

5.3.1测试方法设计………………………………………………………

5.3.2测试结果及分析……………………………………………………

6 结论…………………………………………………………………………

7 参考文献……………………………………………………………………

8 总结、体会和建议

附录

1设计任务及要求

1.1设计任务:利用已有的电子技术知识,设计风速测量的电子线路,要求能够连续测量风速,并采用LED显示测量值。

设计风向测量的电子线路,要求测量电路上显示一组七位二进制码,找出二进制码与风向角之间的对应关系,通过查表的方式求出风向角度,最终确定风向。

1.2设计要求:

⑴设计风速测量的电子线路;

⑵设计风向测量的电子线路;

⑶给出有关器件的选型和参数整定依据;

⑷画出系统详细的硬件连线图;

⑸完成实验室仿真、模拟调试,实现主要功能要求;

⑹完成设计说明书;

⑺答辩中能比较准确地回答所提出的问题;

⑻分析并提出提高测量精度和分辨率的方法和措施。

2系统设计

2.1系统要求:当风速大于0.4m/s时,它能够连续测量风速的大小,测量周期为0.1s,并将前一个周期测量的结果进行锁存并显示在LED显示屏上。风向用七位二进制码表示,通过电子线路上的发光二极管可以直观的读出与当前风向对应的一组七位二进制码,然后通过查表最终确定风向。

2.2系统工作原理:

1.风速测量电子线路的原理

已知风速的计算公式为:V=0.1F

其中V:风速,单位:m/s;F:脉冲频率,单位:Hz

常用的风速传感器的感应组件为三杯式风杯组件,当风速大于0.4m/s时就产生旋转,信号变换为霍尔集成电路。在水平风力驱动下风杯组旋转,通过主轴带动磁棒盘旋转,其上的数十只小磁体形成若干个旋转的磁场,通过霍尔磁敏原件感应出脉冲信号,器频率随风速的增大而线性增加。由于霍尔磁敏原件感应出的信号是正弦波信号,我们需设计一个整形电路,将该正弦波信号转化为同频率的方波信号作为被测脉冲,然后测量出该信号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是STM32使用三杯风速传感器和风向传感器测风速风向的代码示例: ```c #include "main.h" #include "adc.h" #include "tim.h" #define PI 3.1415926 #define RADIUS 0.0575 uint32_t count = 0; uint32_t last_count = 0; float speed = 0.0; float direction = 0.0; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_ADC1_Init(void); static void MX_TIM1_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_ADC1_Init(); MX_TIM1_Init(); HAL_TIM_Base_Start_IT(&htim1); while (1) { HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); uint16_t adc_value = HAL_ADC_GetValue(&hadc1); float voltage = adc_value * 3.3 / 4096; speed = (count - last_count) * 2.4 / 3 * PI * RADIUS; direction = voltage * 300 / 3.3; last_count = count; HAL_Delay(1000); } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) { Error_Handler(); } } static void MX_ADC1_Init(void) { ADC_ChannelConfTypeDef sConfig = {0}; __HAL_RCC_ADC1_CLK_ENABLE(); hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; sConfig.SingleDiff = ADC_SINGLE_ENDED; sConfig.OffsetNumber = ADC_OFFSET_NONE; sConfig.Offset = 0; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } } static void MX_TIM1_Init(void) { TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; __HAL_RCC_TIM1_CLK_ENABLE(); htim1.Instance = TIM1; htim1.Init.Prescaler = 0; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 9999; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; if (HAL_TIM_Base_Init(&htim1) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) { Error_Handler(); } } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG_ADC_CONTROL; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_NVIC_SetPriority(EXTI4_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI4_IRQn); } void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_4) { count++; } } void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM1) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); } } ``` 在代码中,我们首先使用 `MX_ADC1_Init()` 函数初始化ADC1,然后使用 `MX_TIM1_Init()` 函数初始化定时器1,并在定时器中断中进行LED闪烁。在 `MX_GPIO_Init()` 函数中,我们将PB4引脚配置为上升沿和下降沿触发的中断,并在 `HAL_GPIO_EXTI_Callback()` 函数中处理中断事件,记录风速传感器的脉冲数。然后在主循环中,使用 `HAL_ADC_Start()` 和 `HAL_ADC_GetValue()` 函数读取风向传感器的电压值,并根据脉冲数、半径等参数计算风速,根据电压值计算风向。 需要注意的是,代码中使用了HAL库和ADC1、TIM1、GPIOB、GPIOA接口进行通信,如果您的开发板或者接口有所不同,需要进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值