打印
[STM32H7]

采集电池电压

[复制链接]
1465|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xia00|  楼主 | 2021-10-7 12:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
该例程是利用249的P6.3/A3口来采集电池电压的,故其想换程序代码如下:
void ad_init()
{
  P6SEL = 0x08;
  ADC12CTL0 &= ~ENC; //使AD模块处于初始状态
  ADC12CTL0|=MSC+ADC12ON+SHT0_2+REF2_5V+REFON; //采样保持时间为16个ADC12CLK  
}
/****************************************************************************
设置转换模式
adr:转换的首地址。取值范围为0~15
mod:转换模式。0:单通道单次  1:序列通道单次  2:单通道多次  3:序列通道多次
****************************************************************************/
void AdcDo(unsigned int adr,unsigned char mod)
{
  ADC12CTL1 = (adr<<12)+SHP+(mod<<1);   //SHP表示由采样定时器控制采样
}
void ad_open(uint x)
{
  ad_flag =1;
  AdcDo(3,0);                   //开始转换的寄存器为ADC12MEM2
  ADC12CTL0 &= ~ENC;   
  ADC12MCTL3 = SREF_1 + x + 0x80;   // 参考电压选择,输入通道
  ADC12IE |=0x08;              //使能转换中断   
  ADC12CTL0 |= ENC;         //允许转换
  ADC12CTL0 |= ENC+ADC12SC; //转换开始  
}
//读取转换结果的底层程序:
uint ad_read()
{
   task_uart0.flag =0x01;   
    wdt_number =0;
    wdt_temp   =30;  
    inter_flag1 =0x01;
    TBCCTL0 |=CCIE;
  while(ad_flag)           //等待转换完 ,最长1.5s,若没转换完,直接跳过
  {
    if(task_uart0.flag ==0)
      ad_flag =0;
  }
  task_uart0.flag =0;   
  return ad_value;         
}
//关闭ADC模块底层程序:
void ad_close()
{
  ADC12CTL0 &= ~(ADC12ON+REFON);  //不允许转换
  ADC12CTL0 &= ~ENC;
}
#pragma  vector=ADC12_VECTOR
__interrupt  void ADC12ISR(void)
{
  ad_value=ADC12MEM3;//读取ADC值  
  ad_flag=0;
}

  unsigned int adc_voltage[11];                //主程序中调用上述采集子程序将采集的结果存入该RAM中
   for(char k=0;k<11;k++)
   {
     ad_open(3);                             
     wdt_time =0;     
     adc_voltage[k]=ad_read();
     for(int i=0;i<1000;i++);
   }
   ad_close();

使用特权

评论回复
沙发
hfdy01| | 2021-10-7 12:07 | 只看该作者
建议楼主能够使用定时器来启动ad采样这样就省事多了。

使用特权

评论回复
板凳
CallReceiver| | 2021-10-7 12:08 | 只看该作者
当药用到其他端口采集数据的时候,能否把一些需要注意的相关的寄存器的给着重标出来额。

使用特权

评论回复
地板
boy1990| | 2021-10-7 12:36 | 只看该作者
这代码的看似很完整的啊,下边的信号采集函数调用的就是简单了点啊。

使用特权

评论回复
5
sourceInsight| | 2021-10-7 12:37 | 只看该作者
ADC12CTL1  ADC12MCTLx   ADC12IE  ADC12CTL0  ADC12MEMx 主要就涉及到这几个相关的寄存器,用其他端口采集信号的时候,注意涉及到的这几个寄存器加以改变就行了。。

使用特权

评论回复
6
bbapple| | 2021-10-7 12:42 | 只看该作者
如何将转换得到的结果传输到USB接口,然后传到pc机上?

使用特权

评论回复
7
handleMessage| | 2021-10-7 12:43 | 只看该作者
通过单片机采集转换后的数据为16进制的数据啊,该数据要想通过USB接口传输到PC机。。

使用特权

评论回复
8
zhouhuanの| | 2021-10-7 12:47 | 只看该作者
是否还需要知道USB的通讯协议,把USB通讯这一块的也整清楚啊

使用特权

评论回复
9
feiqi1| | 2021-10-7 12:49 | 只看该作者
如果采用定时器启动和中断的话,应该怎么改?

使用特权

评论回复
10
androidbus| | 2021-10-7 12:52 | 只看该作者
想用protues仿真。用1602显示,但是一直显示不出AD转换的数据。

使用特权

评论回复
11
litengg| | 2021-10-7 12:54 | 只看该作者
最近在ADC12 序列多通道的程序上遇到了点麻烦,现只会单次单通道,序列多通道不太会修改程序?

使用特权

评论回复
12
观海| | 2021-11-1 12:00 | 只看该作者
电池电压比较稳定

使用特权

评论回复
13
磨砂| | 2021-11-1 12:07 | 只看该作者
usb的协议这块时候通用的吗

使用特权

评论回复
14
晓伍| | 2021-11-1 12:08 | 只看该作者
需要加限流电阻吗

使用特权

评论回复
15
八层楼| | 2021-11-1 12:42 | 只看该作者
电压会不会一直下降啊

使用特权

评论回复
16
tpgf| | 2021-11-1 12:43 | 只看该作者
这个应该比较好实现的

使用特权

评论回复
17
guanjiaer| | 2021-11-1 12:45 | 只看该作者
多大的电压啊

使用特权

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

本版积分规则

179

主题

1867

帖子

1

粉丝