内容介绍
内容介绍
项目描述
基于AVR64DD32实现加热和温度采集系统
- IO扩展板上有一处加温电阻,通过电流给电阻加热
- 并通过温度传感器感知板上温度的变化
- 将测量到的温度信息显示在LCD屏幕上,绘制一个1分钟的温升曲线。
- 并且每隔1分钟改变加热电阻的占空比,重复温度测量和绘制的过程。
- 板上有一处RGB彩灯,当温度超过50°C时转为红色,低于20°C时转为蓝色,正常状态下为绿色。
- 按下按键时,截图当前的温升曲线。
程序流程图
引脚连接
AVR64DD32 | External Board |
PF2 | LEDR |
PF3 | LEDG |
PF4 | LEDB |
PF6 | KEY |
PA6 | LCD_CLK |
PA4 | LCD_DAT |
PC3 | LCD_RST |
PC2 | LCD_DC |
PC1 | LCD_CS |
PA2 | SENSOR_SDA |
PA3 | SENSOR_SCL |
PC0 | PWM_OUT |
功能实现
1 按键输入检测
通过对输入引脚进行检测,来判断是否刷新屏幕,进而实现屏幕截图功能。
uint8_t PF6_PRESS_FLAG = 0;
void PF6_DefaultInterruptHandler(void)
{
// add your PF6 interrupt custom code
// or set custom function using PF6_SetInterruptHandler()
printf("\r\n Key Pressed");
PF6_PRESS_FLAG++;
PF6_PRESS_FLAG %= 2;
}
2 PWM加热电阻
通过实现不同占空比的PWM信号来驱动加热电阻实现加热的效果快慢。
void SetPWMDuty(int duty){
if(duty==0){
TCA0.SINGLE.CMP0BUF = 0;
}
else
{
TCA0.SINGLE.CMP0BUF = duty/100.0*2999;
}
CurrentDutyCycle = duty;
}
4 温升曲线绘制
以LCD画点函数API为基础,通过长度为128的滑动像素缓存来实现温升曲线的动态绘制。
#define TEMP_DATA_COL 128
int temp_data[TEMP_DATA_COL] = {0};
int temp_data_index = 0;
void LCD_DrawPoint_P(uint16_t x,uint16_t y,uint16_t color, uint16_t size){
if(size>0){
for(int i=0; i<size+1; i++){
for(int j=0; j<size+1; j++){
LCD_DrawPoint(x+i, y+j,color);
}
}
}
}
void draw_tempdata(int temp){
LCD_Fill(0,20,128,108,WHITE);
temp_data[temp_data_index] = temp;
for(int i=0;i<TEMP_DATA_COL-temp_data_index-1; i++){
LCD_DrawPoint_P(i, 128-temp_data[temp_data_index+i],GREEN, 2);
}
for(int i=TEMP_DATA_COL-temp_data_index-1; i<TEMP_DATA_COL; i++){
LCD_DrawPoint_P(i, 128-temp_data[i-(TEMP_DATA_COL-temp_data_index-1)],GREEN, 2);
}
temp_data_index++;
if(temp_data_index>=TEMP_DATA_COL){
temp_data_index =0;
}
LCD_DrawLine(0, 28, 0, 128, RED);
LCD_DrawLine(20, 28, 20, 128, RED);
LCD_DrawLine(40, 28, 40, 128, RED);
LCD_DrawLine(60, 28, 60, 128, RED);
LCD_DrawLine(80, 28, 80, 128, RED);
LCD_DrawLine(100, 28, 100, 128, RED);
LCD_DrawLine(120, 28, 120, 128, RED);
LCD_DrawLine(0, 128, 128, 128, RED);
LCD_DrawLine(0, 108, 128, 108, RED);
LCD_DrawLine(0, 88, 128, 88, RED);
LCD_DrawLine(0, 68, 128, 68, RED);
LCD_DrawLine(0, 48, 128, 48, RED);
LCD_DrawLine(0, 28, 128, 28, RED);
}
5 RGB-LED驱动
RGB小灯为低电平触发,根据温度传感器采集的温度分别控制3个引脚的开关实现不同颜色的显示。
if(TemperatureValue>= 50){
IO_PF2_SetLow();
IO_PF3_SetHigh();
IO_PF4_SetHigh();
}
else if(TemperatureValue <= 30){
IO_PF2_SetHigh();
IO_PF3_SetHigh();
IO_PF4_SetLow();
}else{
IO_PF2_SetHigh();
IO_PF3_SetLow();
IO_PF4_SetHigh();
}
功能展示
心得体会
通过这次活动了解和学习了AVR64DD32这款芯片以及官方IDE的MCC,整体使用上还是比较方便的,有些类似STM32CubeIDE的感觉,一些图形化配置生成初始化代码的功能都有。但是还是存在几个不尽人意的地方对第一次使用该环境的人来说不是很友好:
1 一些依赖都需要在线安装,如果网络情况不是很好的话会造成很多困扰(这里建议开魔法)
2 错误提示不明显,比如“recipe for target ‘.build-conf‘ failed”。(建议重新Clear and Build,如果还解决不了就检查下代码)
软硬件
附件下载
funpack2_4.X.zip
团队介绍
基于AVR64DD32实现加热和温度采集系统
团队成员
maskmoo
评论
0 / 100
查看更多
猜你喜欢
基于AVR64DD32单片机的加热和温度采集系统基于AVR64DD32单片机的加热和温度采集系统。IO扩展板上有一处加温电阻,通过电流给电阻加热,并通过温度传感器感知板上温度的变化,将测量到的温度信息显示在LCD屏幕上
lixiang
761
【Funpack2-4】基于AVR64DD32的加热和温度采集系统基于AVR64DD32的加热及温度采集,使用了GPIO、ADC、UART、I2C、SPI等外设。
wakojosin
932
Funpack2-4基于AVR64DD32的加热和温度采集系统基于AVR64DD32的加热和温度采集系统,通过LCD显示当前屏幕温度和曲线,当温度达到设定值,led灯显示不同颜色
llzx
890