打印
[RISC-V MCU 应用开发]

基于AG32开发板的NTC温度测控与记录功能实现

[复制链接]
31|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创#
@21小跑堂
AG32开发板是一款基于国产异构双核 (RISC-V+FPGA) 处理器的开发板,它采用的是AG32VF407系列32位微控制器,相当于一个主频248MHzMCU + 2KLES (FPGA) 。其内部是通过AHB总线,把MCUFPGA链接在一起,在速度方面要比传统SPI快很多倍,它既可以单独运行,也可交互运行。其MCU在初始时是与STM32管脚相兼容,但在实际应用中是可以通过配置文件来灵活加以重定义的。
AG32开发板的整体开发工具由两部分构成,AG32开发板和AGM专用下载器,详见图1和图2所示。
1 开发板

2 下载器
该开发板的功能布局如图3所示,在初识状况下,其上电后除电源指示灯被点亮外,下方的4个绿色LED也在不停地闪烁,见图4所示。
3 功能分布

4 上电效果
那面对这样一款开发板该如何进行开发呢?
其开发工具主要由VSCODE、python及相应的sdk所构成,在进行cpld 开发时,还会用到quartussupra
在完成软件安装及配置后,打开VSCODE软件其界面如图5所示。
5 界面形式
那又该如何在这款开发板上完成NTC温度测控记录功能呢?
1. 选取引脚并建立映射
为驱动串行数码管模块,所使用的引脚为:PIN_92、PIN_95PIN_96
为了通过串口来进行数据记录,所使用的引脚为:PIN_69和PIN_68
为此需要example_board.ve中建立如下的映射关系:
GPIO4_5 PIN_96   #  CLK
GPIO4_6 PIN_95   #  DIN
GPIO4_7 PIN_92   #  CS
UART0_UARTRXD PIN_69
UART0_UARTTXD PIN_68
有了以上的映射关系,在进行程序设计时就可以GPIO4_5的形式来使用 PIN_96这个引脚。
AG32 而言,其芯片内部可向用户提供的GPIO可达 80 个,共分为 10 组,每组则有 8 个。
在代码中,各组对应着GPIO0GPIO1GPIO2... GPIO9
在各组内,其 IO 是用 bit 来表示,即GPIO_BIT0GPIO_BIT1GPIO_BIT2... GPIO_BIT7
2. 串行数码管显示驱动
这里所用的串行数码管模块是以MAX7219为主控芯片,可显示8位数值,并支持级联使用。除电源外,它只需3GPIO口,故十分节省引脚资源,其外观如图6所示。
6 串行数码管显示模块
为便于向串行数码管显示模块提供高低电平的输出,定义的语句为:
#define CLK_SetLow   GPIO_SetLow(GPIO4,GPIO_BIT5)
#define CLK_SetHigh  GPIO_SetHigh(GPIO4,GPIO_BIT5)
#define DIN_SetLow   GPIO_SetLow(GPIO4,GPIO_BIT6)
#define DIN_SetHigh  GPIO_SetHigh(GPIO4,GPIO_BIT6)
#define CS_SetLow    GPIO_SetLow(GPIO4,GPIO_BIT7)
#define CS_SetHigh   GPIO_SetHigh(GPIO4,GPIO_BIT7)
由于该串行数码管显示模块所使用的关键芯片为MAX7219,故为它配置了一个串行发送字节数据的函数,其内容为:
void Write_Max7219_byte(char DATA)
{
  char i;
  CS_SetLow;
  UTIL_IdleUs(10);
  for(i=8;i>=1;i--)
  {
      CLK_SetLow;
      if(DATA&0x80)
         DIN_SetHigh;
      else
         DIN_SetLow;
      UTIL_IdleUs(10);
      DATA=(char)(DATA<<1);
      CLK_SetHigh;
      UTIL_IdleUs(10);
  }
}

以函数Write_Max7219_byte()为基础,向指定地址发送数据的函数为:
void Write_Max7219(char address,char dat)
{
  CS_SetLow;
  Write_Max7219_byte(address);
  Write_Max7219_byte(dat);
  CS_SetHigh;
}

对于串行数码管显示模块,其初始化函数为:
void Init_MAX7219(void)
{
   Write_Max7219(0x09, 0xff);
   Write_Max7219(0x0a, 0x02);
   Write_Max7219(0x0b, 0x07);
   Write_Max7219(0x0c, 0x01);
   Write_Max7219(0x0f, 0x00);
}

要实现串行数码管显示模块的测试,相应的主程序为:
int main(void)
{
   board_init();
    SYS_EnableAHBClock(APB_MASK_GPIO4);
    GPIO_SetOutput(GPIO4,GPIO_BIT5);
    GPIO_SetOutput(GPIO4,GPIO_BIT6);
    GPIO_SetOutput(GPIO4,GPIO_BIT7);
    Init_MAX7219();
    Write_Max7219(1,1);
    Write_Max7219(2,2);
    Write_Max7219(3,3);
    Write_Max7219(4,4);
    Write_Max7219(5,5);
    Write_Max7219(6,6);
    Write_Max7219(7,7);
    Write_Max7219(8,8);
    while (1) ;
}

经程序编译及烧录ve和烧录程序,其运行效果如图7所示。
7 显示效果图
这样,就完成了串行数码管模块的显示驱动,后面数值显示就它来完成,对NTC检测的温度值显示
3. NTC温度检测与显示
NTC温度检测是建立在A/D数据采集的基础上,通过添加感温器件即可进行温度检测。
NTC是一种温度敏感器件,其阻值会随温度的升高而呈下降的热敏特性。
AG32开发板在外接NTC热敏电阻模块的情况下,可进行温度的检测,其电路如图8所示,它与开发板的连接如图9所示
8 测温电路

9 电路连接
对于A/D数据采集,其涉及模拟电路,需要 fpga 部分的支持。 AG32 自带一套 fpga 逻辑(默认 ip), 在默认的 ip 中,支持 3 ADC 2 DAC,1 路比较器 CMP(双通道,可独立运行)。
在通常情况下,ADC 默认是宏关闭的。需在 platformio.ini 中使能默认的 ip。
platformio.ini 中的配置为:
ip_name = analog_ip
NTC温度检测模块与ADC的通道2PIN_25)相连接的情况下,实现温度检测的与形式的函数为:
void TestAdc(ADC_TypeDef *adc)
{
    uint32_t u,V;
    int channel = ADC_CHANNEL2;
    ADC_SetChannel(adc, channel);
    ADC_Start(adc, sclk_div);
    ADC_WaitForEoc(adc);
    printf("  channel %d: 0x%03x\n", channel - ADC_CHANNEL0, ADC_GetData(adc));
    u=ADC_GetData(adc)*3300/0XFFF;
    printf("  channel %d: %d\n", channel - ADC_CHANNEL0, u);

实现秒间隔均匀温度检测的函数为:
void TestAnalog(void)
{
     Init_MAX7219();
     while (1) {
       TestAdc(ADC0);
        UTIL_IdleUs(1000e3);
    }
}

实现温度检测与显示的主程序为:
int main(void)
{
   board_init();
   TestAnalog();
}

经程序的编译及烧录ve和烧录程序,其运行效果如图10和图11所示。在手指接触NTC热敏电阻的外部铠甲时,可明显观察到温度在缓慢地上升。
10 室温检测

11 体温检测
4. 数据记录
为进行检测温度的记录,可使用串口数据记录模块来实现。
该数据记录模块是一种串口设备,在使用时其工作的波特率为9600bps在接收到开发板所发送的数据时,就将数据完整地记录到TF卡的文件中。
串口数据记录模块与开发板的连接如图12所示,就是与开发板上的UART0相连。
12 电路连接
为产生9600bps的波特率,需在platformio.ini文件中进行如下设置:
build_flags = -DBAUD_RATE=9600
这样在编译和烧录后,即可通过串口调试工具来查看其记录的内容,见图13所示。
13发送数据
在接入数据记录模块的情况下,其记录数据的状态如图14所示,即写指示灯在不停地闪亮,数据被不断地写入TF卡。

14 数据记录状态
在结束数据记录后,通过读取TF卡可见到相应的记录文件,其文件名由“urc+数字串”构成,其记录文件的格式及内容如图15所示。
9 记录格式及内容
这样就完整地实现了温度检测与记录功能,若进行温度控制,可在程序中添加一个限定值,当温度超过限定值时,就输出控制信号以停止加热过程,否则就启动加热过程。
由此可见,使用AG32开发板进行项目开发还是比较方便的,特点也较为鲜明!


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

450

主题

2746

帖子

38

粉丝