关于stm32的ad7792移植难题排解

转换原理及参数指标
1. 采样定理
2. 为了正确无误的用图5.2.2中所示的采样信号vs表示模拟信号vi,必须满足式中, fs>=2fmax
fs为采样频率;fmax为输入信号vi的最高频率分量的频率;上式就是所谓的采样定理。满足采样定理的条件下,可以用一个低通滤波器将信号vs还原为vi,这个低通滤波器的电压传输系数|a(f)|在低于fmax的范围内应保持不变,而在fs-fmax以前应迅速下降为零,采样定理规定了a/d转换的频率下限。
ad7792 遇到的问题/学到的知识点
学到的知识点:
1.在stm32中
u8 : unsigned char
u16: unsigned short
u32: unsigned int
2. 在stm32中 ad7792采样的电压数值要经过转换成ascii码字符在串口中打印出来有两种编程方式实现:
u8tempd;
u16 datau16;
char str[20];
unsigned short idata[3];
u8 strvbat[8]={'/','/','/',',',0,0,0,0};
u8 ascii[21]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','+',//10->16
',',//11-17
'-',//12-18
'.',//13-19
'/',//14-20
};
方式一:(简洁版)
ad_vbat[tempd] = spi_read16bit();
memcpy(&idata[0],& ad_vbat[tempd],2);
sprintf(str,%d,idata[0]);
uart1_tx485_puts(usart1,&str[0]);
方式二:(复杂版)
ad_vbat[tempd] = spi_read16bit();
datau16 = ad_vbat[tempd];
strvbat[0]=ascii[datau16/10000];
strvbat[1]=ascii[datau16%10000/1000];
strvbat[2]=ascii[datau16%1000/100];
strvbat[3]=ascii[datau16%100/10];
strvbat[4]=ascii[datau16%10];
uart1_tx485_puts(usart1,&strvbat[0]);
while(usart_getflagstatus(usart1, usart_flag_txe)==reset);
3.遇到的问题
问题一:通过串口打印,采样的数值为32768左右转化后的电池电压为2.5v,而电池实际电压应该为3.32v采样数值应该为43582左右的数值;
问题根源:通道切换的问题;
ad7792有3个模拟输入通道,初始化ad7792配置函数中,写配置寄存器spi_sendbyte(0x10); /* 写配置寄存器*/
spi_send16bit(0x1080); // 偏置电压禁用禁用熔断电流单极性编码内部基准
spi_send16bit(0x1080)设置的采样通道是采样电流的通道,所以采样的是电流的数值;
题二:在移植ad7792独立出来时,发现电池电压采样值打印为0000;
问题根源:spi配置问题;
原理图:
错误配置:
gpio_initstructure.gpio_pin = gpio_pin_5 | gpio_pin_7 ;
gpio_initstructure.gpio_mode = gpio_mode_af_pp; //复用推挽输出
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_init(gpioa, &gpio_initstructure);
gpio_initstructure.gpio_pin = gpio_pin_6;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_initstructure.gpio_mode = gpio_mode_in_floating; //浮空输入
gpio_init(gpioa, &gpio_initstructure);
gpio_initstructure.gpio_pin = gpio_pin_4;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_initstructure.gpio_mode = gpio_mode_out_pp; //通用推挽输出
gpio_init(gpioa, &gpio_initstructure);
正确配置:
/* configure spi1 pins: sck, miso and mosi */
gpio_initstructure.gpio_pin = gpio_pin_5 | gpio_pin_4|gpio_pin_7;
gpio_initstructure.gpio_mode = gpio_mode_out_pp; //通用推挽输出
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_init(gpioa, &gpio_initstructure);
/* 配置miso为输入 */
gpio_initstructure.gpio_pin = gpio_pin_6;
gpio_initstructure.gpio_speed = gpio_speed_50mhz;
gpio_initstructure.gpio_mode = gpio_mode_in_floating; //浮空输入
gpio_init(gpioa, &gpio_initstructure);

vivo Xplay6磨砂黑配色23日公布 引领手机时尚新潮流
Fortinet 发布自学习人工智能产品有什么功能
[图文]天线驻波比的测量方法
性能盘点骁龙835、超大屏幕、超长续航?告诉你适合玩《王者荣耀》的手机长什么样
什么射频信号测试要用示波器?如何使用示波器进行射频信号测试?
关于stm32的ad7792移植难题排解
本安防爆型激光探测器在石油石化周界报警系统的应用
变电站常用分类方式 变电站为什么用直流电
人工智能的痛点在哪里?
键盘手托
(TOSHIBA)东芝光耦:SDIP6封装(包装)
华盛顿开始关注物联网安全
用通量场定向材料优化无线充电的设计
一个高度可扩展的网络监控软件:HostMonitor
灵活、开放的AI软件实现了个人车辆的安全便捷和智能
热成像技术给无人机带来了什么
RSL10 Mesh平台加快蓝牙低功耗网状网络应用
扬智科技推出机顶盒芯片M3383/M3603/M3606
丹麦Bang Olufsen推出首款48英寸OLED 4K电视
5G给智慧城市带来的影响有哪些