聚丰项目 > 基于CH32V103R 开发板的数据采集

基于CH32V103R 开发板的数据采集

最近在做医疗制品分公司的MES项目,需要读取设备的能耗等数据,因为部分设备比较老旧,无法直接获取相关数据,需要通过传感器和控制器获取,考虑到设备数量较大,如果采用单片机经济性会比较高,正好得知RTT大赛的消息,有幸申请到了一片沁恒微电子的CH32V103R-R1开发板,希望国产的RISC-V架构的芯片能尽快替代进口。也希望国产的软件及生态能尽快建立起来。

jf_38023859 jf_38023859

分享
0 喜欢这个项目
团队介绍

jf_38023859 jf_38023859

团队成员

sl 工程师

分享
项目简介
最近在做医疗制品分公司的MES项目,需要读取设备的能耗等数据,因为部分设备比较老旧,无法直接获取相关数据,需要通过传感器和控制器获取,考虑到设备数量较大,如果采用单片机经济性会比较高,正好得知RTT大赛的消息,有幸申请到了一片沁恒微电子的CH32V103R-R1开发板,希望国产的RISC-V架构的芯片能尽快替代进口。也希望国产的软件及生态能尽快建立起来。
硬件说明

硬件部分主要包括以下三部分:

(1)主控装置:CH32V103R-R1开发板

(2)输入分压:精密电阻分压器

(3)传感器:电流互感器,温度传感器、湿度传感器



软件说明

这个MES应用中,需采集设备的参数,这里就利用开发板实现将传感器输出的设备电压,电流、功率、压力、流量、温度、湿度等模拟量信号,转换成数字量信号,通过串口通信传递给上位机。

       核心的功能就是ADCuart

     找到了ADC的例程,例程中有4路输入,指南上给的技术参数显示,这个开发板的芯片有1612位外部ADC通道,和两路内部通道。

       将程序修改为16ADC规则通道采集。

// 配置 ADC 通道转换顺序为1,第一个转换,采样时间为55.5个时钟周期

 

    ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 5, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 6, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_6, 7, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_7, 8, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 9, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 10, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 11, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 12, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 13, ADC_SampleTime_55Cycles5);

    ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 14, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 15, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_15, 16, ADC_SampleTime_55Cycles5);

主程序:

    int main(void)

{

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    USARTx_CFG();

 

    Delay_Ms(100);

    USARTx_SendStr(USART2, "This is a test data_MADC.\n");

    Delay_Init();

    USART_Printf_Init(115200);

    ADC_DMA_CONF();

    printf("SystemClk:%d\r\n",SystemCoreClock);

    printf("\r\n ADC多通道DMA读取测试 \r\n");

    while (1)

    {

  //

        char str[500];

        sprintf(str,"ADC1:%d,ADC2:%d,ADC3:%d,ADC4:%d,ADC5:%d,ADC6:%d,ADC7:%dADC8:%d,ADC9:%d,ADC10:%d,ADC11:%d,ADC12:%d,ADC13:%d,ADC14:%d,ADC15:%d,ADC16:%d \r\n", Get_Adc_Average(ADC_ConvertedValue[0],10),ADC_ConvertedValue[1],ADC_ConvertedValue[2],ADC_ConvertedValue[3],ADC_ConvertedValue[4],ADC_ConvertedValue[5],ADC_ConvertedValue[6],ADC_ConvertedValue[7],ADC_ConvertedValue[8],ADC_ConvertedValue[9],ADC_ConvertedValue[10],ADC_ConvertedValue[11],ADC_ConvertedValue[12],ADC_ConvertedValue[13],ADC_ConvertedValue[14],ADC_ConvertedValue[15]);

        printf("ADC1:%d,ADC2:%d,ADC3:%d,ADC4:%d,ADC5:%d,ADC6:%d,ADC7:%dADC8:%d,ADC9:%d,ADC10:%d,ADC11:%d,ADC12:%d,ADC13:%d,ADC14:%d,ADC15:%d,ADC16:%d \r\n", Get_Adc_Average(ADC_ConvertedValue[0],10),ADC_ConvertedValue[1],ADC_ConvertedValue[2],ADC_ConvertedValue[3],ADC_ConvertedValue[4],ADC_ConvertedValue[5],ADC_ConvertedValue[6],ADC_ConvertedValue[7],ADC_ConvertedValue[8],ADC_ConvertedValue[9],ADC_ConvertedValue[10],ADC_ConvertedValue[11],ADC_ConvertedValue[12],ADC_ConvertedValue[13],ADC_ConvertedValue[14],ADC_ConvertedValue[15]);

        USARTx_SendStr(USART2, str);

        Delay_Ms(500);


演示效果

image.pngimage.png

评论区(0 )