利用ad转换器时一定要用程序运行吗

利用ad转换器时一定要用程序运行吗,第1张

不一定,AD 转换器按照转换原理可分为直接AD 转换器和间接AD 转换器。所谓直接AD 转换器,是把模拟信号直接转换成数字信号,如逐次逼近型,并联比较型等。其中逐次逼近型AD 转换器,易于用集成工艺实现,且能达到较高的分辨率和速度,故目前集成化AD 芯片采用逐次逼近型者多;间接AD 转换器是先把模拟量转换成中间量,然后再转换成数字量,如电压/时间转换型(积分型)、电压/频率转换型、电压/脉宽转换型等。 其中积分型A/D 转换器电路简单,抗干扰能力强,切能作到高分辨率,但转换速度较慢。 有些转换器还将多路开关、基准电压源、时钟电路、译码器和转换电路集成在一个芯片内,已超出了单纯A/D 转换功能,使用十分方便。

兄弟:不知道你玩不玩32 ,有个32 的在工程上用过,直接刷程序,串口连接电脑就可以输出AD 转换的结果。如果不玩32 的话。

首先第一步排查: 排查单片机能不能正确显示 你测试到的 AD 信号,显示正确不?

比如给他 3V 电压 ,用数码管显示出来。

第二: 串口发送,找个能正确发送数据的代码 ,直接把 ,你检查的数值给这个变量,让串口发送,

一步一步找问题,你绝对能解决的。我把AD0809 的代码给你用数码管测试

#include <reg52h>

#define uint unsigned int

#define uchar unsigned char

uchar code LEDData[]=

{

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f

};

sbit OE = P1^0;

sbit EOC = P1^1;

sbit ST = P1^2;

sbit CLK = P1^3;

void DelayMS(uint ms)

{

uchar i;

while(ms--)

{

for(i=0;i<120;i++);

}

}

void Display_Result(uchar d)

{

P2 = 0xf7;

P0 = LEDData[d%10];

DelayMS(5);

P2 = 0xfb;

P0 = LEDData[d%100/10];

DelayMS(5);

P2 = 0xfd;

P0 = LEDData[d/100];

DelayMS(5);

}

void main()

{

TMOD = 0x02;

TH0 = 0x14;

TL0 = 0x00;

IE = 0x82;

TR0 = 1;

P1 = 0x3f;

while(1)

{

ST = 0;

ST = 1;

ST = 0;

while(EOC == 0);

OE = 1;

Display_Result(P3);

OE = 0;

}

}

void Timer0_INT() interrupt 1

{

CLK = !CLK;

}

这是图纸是硬件组态

下面是程序

    CALL  FC   117

     IN0 :=PIW8  调速杆1       0-10V 对应 0-27648

     IN1 :=27648

     IN2 :=0

     IN3 :=20

     IN4 :=-20

     OUT5:=MW304

    NOP   0

该程序将调速杆1的位置信号0-10V转换为 -20到20的数值

#include <msp430x14xh>

void main(void)

{

WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer

P6SEL |= 0x01; // Enable A/D channel A0

ADC12CTL0 = ADC12ON+SHT0_2; // Turn on ADC12, set sampling time

ADC12CTL1 = SHP; // Use sampling timer

ADC12MCTL0 = SREF_2; // Vr+ = VeREF+ (external)

ADC12CTL0 |= ENC; // Enable conversions

while (1)

{

ADC12CTL0 |= ADC12SC; // Start conversion

while ((ADC12IFG & BIT0)==0);

_NOP(); // SET BREAKPOINT HERE

}

}

这是TI公司的例程

我最近也在弄STC的单片机,看了下代码,觉得以下这段似乎有点问题

for(i=0;i<10;i++)

{

tp=0;

ADC_RES=0;

ADC_RESL=0; //低两位清零

ADC_CONTR|=0x08; //启动AD转换

while(!tp) //判断AD转换是否完成

{

tp=0x10;

tp&=ADC_CONTR;

}

ADC_CONTR&=0xe7;

ad_average_result=ADC_RES;

q=q+ad_average_result;

}

你的意图是想做10次转换,然后取平均值作为最终结果吧, while(!tp) 就是说转换完成后将转换完成标志位清零接着再取出转换后的数,可是转换未完成的话就跳出while直接执行后面的语句了吧,不过这个就是有问题应该也不会导致完全没结果输出,也就是结果有问题的话灯应该也会亮的,还有是否确定模拟信号输入口是否和寄存器设置所选的一致,P1ASF这个寄存器我也找不到说明

for语句从AdcRegsADCRESULT0采集512个数据(电压模拟值),存于取样表SampleTable数组,同时将采样数据转换成实际电压数值,存放于dianya数组。将512个电压值求平均值,作为当时的电压值(sum先累加再平均)

然后显示出来并且延时。

整个过程无限循环(while(1){})。

请问你想问的是基于simulink的程序开发么?

舵机控制:实验目的:通过可变电阻器电压的大小,控制舵机的运动(运动范围是0-180°)。实验原理:1,要想实现上述目的,需要使用Arduino的模拟输入通道和一个数字通道,模拟输入通道用来检测电压的变化,模拟量0--5V,转化成数字量为0-1023。这是因为Arduino的AD转换是10位的,数字通道是最为舵机的控制,驱动舵机进行动作。2,根据Arduino的通道情况,实验中使用数字通道4作为舵机的控制通道,使用模拟输入4作为模拟电压检测通道。3,由1中可知模拟通道转换之后的值是0-1023,舵机旋转的角度是0-180°。所以要把两个对应起来,简单的做法就是转换后的模拟信号乘以180/1023实验步骤:1, 按照实验原理需要搭建模型,具体如下图所示,这里Simulink模块的添加步骤就不在赘述。

LED闪烁实验:1,首先打开simulink软件,新建一个模型文件,命名test1。2,从Simulink库文件中找到Arduino的模块库,然后添加数字输出通道;从simulink库中找到脉冲发生器模块添加到新建的工程中。3,模型搭建完之后,相关模块进行配置,双击脉冲发生器模块和数字输出模块下图所示;脉冲发生器模块信号幅值设置为1,周期设置2s,占空比设置为50%;由于在Arduino Mega2560板子上,LED是接在数字13号引脚,所以模块设置引脚为13,设置完之后,板子上的LED灯会以2s为周期进行闪烁,亮1s,灭1s。4,模型至此搭建完成,接下来需要对模型进行配置,主要是配置基于Arduino Mega2560生代码的环境。5, 接下来就是生代码,并且把代码编译之后,下载到Arduino Mega2560板子中,然后板子就会按照前面步骤的设置进行闪烁,下载程序之前,首先确保板子和电脑连接上了。6等待一会,下载完毕之后,会看到板子上的LED在闪烁。

以上就是关于利用ad转换器时一定要用程序运行吗全部的内容,包括:利用ad转换器时一定要用程序运行吗、关于单片机向串口发送AD转换结果的程序、plc中ad转换器怎么用,怎么编程,输入个模拟量怎么转换成数字量,并加入到比较器进行比较等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9822466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存