在线时间6060 小时
UID3426478
注册时间2017-9-25
NXP金币5684
TA的每日心情 | 奋斗 昨天 20:47 |
---|
签到天数: 1485 天 [LV.10]以坛为家III
超级版主
- 积分
- 93127
- 最后登录
- 2024-5-8
|
本帖最后由 stm1024 于 2018-11-9 21:40 编辑
这个稍微有点复杂,不过还好,ADC可以硬件触发,也可以软件方式实现转换。
看手册:
我用的是通道0,写代码:- #include "cmsis.h"
- #include "core_cm0plus.h"
- #include "board.h"
- void Delay_ms(uint32_t ms);
- int main()
- {
- Board_Init();
- uint32_t x,i,t;
- float f=0;
- //clock
- LPC_SYSCTL->SYSAHBCLKCTRL|=1<<6;//GPIO
- LPC_SYSCTL->SYSAHBCLKCTRL|=1<<13;//ADC
-
- //power on
- LPC_SYSCTL->PDRUNCFG&=~(1UL<<4);//ADC_PD
-
- LPC_GPIO->DIR[1] &= ~(1<<9);//P1.9 input
- LPC_IOCON->PIO1[9]=IOCON_FUNC3;//ADC0
-
- //start calibration
- LPC_ADC->CTRL=(1UL<<30);
- while((LPC_ADC->CTRL & (1UL<<30)));//and wait
-
- LPC_ADC->SEQ_CTRL[0]=(1<<0);//channel 0
- //TRIGPOL & ENA
- LPC_ADC->SEQ_CTRL[0]|=(1<<18)|(1UL<<31);
-
- while(1)
- {
- t=0;
- f=0;
- for(i=0;i<100;i++)
- {
- LPC_ADC->SEQ_CTRL[ADC_SEQA_IDX]|=(1<<26);//start bit
- x=LPC_ADC->DR[0];
- if(x&(1UL<<31))
- {
- t++;
- f+=((x&0xffff)>>4)*3.3f/4096;
- }
- }
- printf("%f\r\n",f/t);
- Delay_ms(500);
- }
- }
复制代码 在P1.9针脚上引入PMW波模拟的电压,程序通过100采样做滤波处理。
分别是占空比为80%和50%的电压值。
没有想象中的那么好(或者是我没有用好?),不过基本上也足够了。
但是……我把外部电压的线路拔了,居然还有0.86v电压?这个是什么情况,还得仔细研究一下。刚开始以为是温度传感器的原因, 但是我并没有打开温度传感器的电源啊~
|
|