我有一台设备,并且有数字量I / O,模拟量I / O。 我将以下命令发送到设备进行通信。该设备具有gpio模块。 我的设备处于休眠状态

写入数字输入:gpio set/clear x

从数字输出读取:gpio read x

从数字输出读取:adc read x

(x:针号)

如何创建正弦/方波并计算振幅? 要创建方波:

打开设备

睡觉

写入设备低模式(t0)

睡觉

写入设备高模式

睡觉

写入设备低模式(t1)

周期=(t1-t0)

这是方波吗?

嗯,看来您正在为USB到GPIO的减少编写SW,所以这不是直接针对MCU而是针对PC的代码吗? 而是通过一些驱动程序将数据发送到该USB板上。 您应该添加一些相关信息,甚至重新标记也是个好主意(如果可能,将设备名称添加到标记中)。 因此,现在我不确定我的答案是否适合此操作(可能存在计时问题),是设备同步IO端口还是异步设备(是否设置了IO应该切换或读取或发送命令的时间,那么是 执行+粗略延迟?)

看来你的例子确实是方波

如果write to device low mode(t0)将输出引脚设置为低电平,将write to device low mode(t1)设置为高电平或反向,则周期为睡眠时间加一定时间以设置GPIO状态。不知道为什么您有时间在GPIO设置线内而不是在睡眠中...(可能与平台有关?)

走向罪恶浪

使用带有一些预先计算的幅度表的DAC或PWM + RC滤波器,其中索引会定期增加。

BYTE sintab[32]={ 128,...,255,...,128,...,0,....,127  };

编码:128为零,255为+1和0为-1;现在只需添加一些索引:

int ix=0'

并偶尔(可能在某个计时器上)递增它并将输出设置为新值:

ix=(ix+1)&31;

如果到达终点,则31和31只会使索引从起点重新开始循环(sintab的大小必须为2的幂)。周期是计时器频率/ sintab大小

[笔记]

您可以根据自己的目的进行修改,例如使sintab[][]成为2D数组,其中第一个索引表示幅度,第二个索引表示ix。在较旧的平台(MCU)上,您可以将PWM序列直接编码到sintab端,依此类推...

您可以像这样预先计算sintab值:

sintab[ix]=128.0+127.0*sin(float(2.0*M_PI*ix)/32.0);

或者如果您的平台支持足够快的sin,则可以直接使用上面的行而无需实际的数组...

[edit1]

对于sinwave,您可以仅使用0/1状态。如果您需要模拟输出并且:

您有DAC(数模转换器)

然后将实际振幅发送给它,例如dac write sintab[ix];,它将为您在输出引脚上产生模拟电压。

您没有任何备用DAC,而是使用PWM脉冲宽度调制

避免使用DAC仍然是数字引脚的模拟输出,这是一个古老的技巧。它是这样的:

输出值是每个时间块的累积能量/电压,因此您生成方波信号

比率1:1表示一半周期为H,其余时间为L

比率2:1表示周期的2/3是H,其余L

输出为H的时间越长,输出值就越大。这仍然是数字输出,但是如果在其上连接任何非线性设备(如电容器或线圈),则energy inertia会导致H电压下降到一定水平,具体取决于方波比。最常见的是RC滤波器(R是串行的,C是接地的)。如果要驱动一些线圈(电动机),则不需要过滤器。这种用法通常会在机器附近发出通常会听到的高音调(PWM频率)...

PWM频率必须足够高(比正弦波频率高很多倍)

一些具有幅度和频率设置的PWM代码:

const int timer_T=1;        // used timer interval [ms]

const int PWM_max=10;       // PWM max amplitude+1

int PWM_s=0;                 // PWM actual step

int PWM_t=0;                 // PWM actual time

int PWM_a=3;                 // PWM amplitude <0,PWM_ratio_max)

int PWM_T=200;               // PWM period [ms]

void OnTimer()

{

int PWM_T0=PWM_T/PWM_max; // PWM step period must be >=1 !!!

PWM_t+=timer_T;

if (PWM_t>=PWM_T0)

{

if (PWM_s<=pwm_a) gpio set x; else gpio clear x;

PWM_s++; if (PWM_s>=PWM_max) PWM_s=0;

PWM_t-=PWM_T0;

}

}

我不明白我如何使用sin表。 我只能将输出设置为0或1。但是表中的数字不同。 例如,数字为128,我应该设置为" 0"吗?

@sdn该设备没有仅DAC的ADC,因此您必须使用PWM。 首先创建具有可变比率和固定频率(睡眠(t0),睡眠(t1),t0 + t1 =恒定,t0 / t1为比率)的功能方波(通过示波器或LED检查)。 如果完成,则实现sintab ...如果没有示波器,那么如果PWM f高> 1KHz而sinwave频率低0.1Hz,您仍然可以使用LED,那么您应该会看到亮度变化...

@Sdn在C ++中添加了一些用于PWM的代码(直接在Opera内编写,因此可能会有错别字)计时器越快,获得的幅度步数越高或PWM频率越高

c语言方波生成程序,关于C#:在软件上生成方波以进行模拟输入/输出相关推荐

  1. matlab离散方波信号,MATLAB - 在ODE15s函数中生成方波信号?(MATLAB - Generate square signal in ODE15s function?)...

    MATLAB - 在ODE15s函数中生成方波信号?(MATLAB - Generate square signal in ODE15s function?) 我试图从函数内部生成一个方形信号,通过O ...

  2. c语言课设宿舍管理程序,C语言程序课程设计宿舍管理软件.doc

    C语言程序课程设计宿舍管理软件.doc 课程设计(论文) 题 目 名 称 宿舍管理软件 课 程 名 称 C语言程序课程设计 学 生 姓 名 学 号 系 .专 业 信息工程系.信息大类 指 导 教 师 ...

  3. 完成杂志续订c语言程序,C语言程序设计报告杂志订阅管理软件.doc

    C语言程序设计报告杂志订阅管理软件 C 语 言 程 序 设 计 学院: 工程学院 班级序号: 学号: 20071003303 姓名: 华进 指导老师: 刘文中 前言 我们学习C语言课程设计的主要目的是 ...

  4. 杂志订阅管理系统c语言实训报告,C语言程序设计报告—杂志订阅管理软件、、.doc...

    C语言程序设计报告-杂志订阅管理软件.. 中国地质大学(武汉)C语言课程设计报告 学 院: 专 业: 题 目: 杂志订阅管理系统 班 级: 姓 名: 学 号: 指导教师: 2011年1月9日 程序在最 ...

  5. 单片机用c语言编写测量波形频率和占空比,单片机测量方波的频率、占空比及相位差的方法...

    1.频率及占空比的测量 如上图所示,当脉冲的上升沿来临时,将定时器打开:紧接着的下降沿来临时,读取定时器的值,假设定时时间为t1:下一个上升沿来临时关闭定时器,读取定时器的值,假设定时时间为t2.t1 ...

  6. c语言编写词库_C语言课程设计--电子生词库软件

    C语言课程设计--电子生词库软件 程序设计基础实训任务书程序设计基础实训任务书 题目电子生词库软件 学生姓名 学号 班级 题目类型软件工程(R) 指导教师 一.设计目的一.设计目的 1.进一步掌握和利 ...

  7. C语言基于单链表的词典软件

    C语言基于单链表的词典软件 实验1: 日期:2022-10-4 类型:设计型 题目:基于单链表的词典软件 内容: 利用单链表存储词典,可以实现从文件中加载数据.查询单词.添加词条.删除词条.将词典保存 ...

  8. govcl html5,GoVCL —— Go 语言开发的 UI 组件库 | 软件推介

    原标题:GoVCL -- Go 语言开发的 UI 组件库 | 软件推介 由于现有第三方的Go UI库不是太大就是用的不习惯,或者组件太少.就萌生了自己写一个UI库的想法 项目介绍 由于现有第三方的Go ...

  9. 自动化专业怎么自学c语言,自动化专业可以自学哪些软件来提高自己

    程序设计基本功.C/C++,Python或者JavaScript,无论程序语言多么千变万化,C/C++都是万变不离其宗的基础,深入学习可以有效地理解计算机程序设计的基础知识,同时由于C语言和硬件之间的 ...

  10. 单片机STC89C52_C语言代码_来回流水_软件延时

    单片机STC89C52_C语言代码_来回流水_软件延时 //11.0592MHz: //50=3.3ms;80=5.2ms;100=6.5ms;1000=65ms; //5000=325ms;7800 ...

最新文章

  1. zookeeper快速入门——简介
  2. Using Graphviz dot for ERDs, network diagrams and more
  3. 如何把单精度二进制数转换成十进制数?
  4. matlab中画花瓣,matlab画心,画玫瑰花,表白合集
  5. 时间序列分析模型:ARIMA模型和SARIMAX算法
  6. 【千字过程分析】剑指 Offer 04. 二维数组中的查找
  7. 算法学习之循环结构程序设计
  8. Apache FOP与Eclipse和OSGi的集成
  9. DSPBuilder笔记
  10. 判断应用程序是否是当前激活程序(获得焦点的程序)
  11. 码农提高工作效率(转载)
  12. web和python前景_我想了解一下pythonweb和javaweb比较详细的学习成本和应用前景,谢谢!?...
  13. sybase 事务 超时返回_事务背景介绍(2):MongoDB中的逻辑会话
  14. java 通过经纬度计算巨鹿,中国主要城市经纬度查询
  15. webstorm2020.2.3下载安装教程
  16. TikTok怎么运营带货
  17. 万能险生存金什么意思,一文告诉你!
  18. GCSE英语语言考试-语言和结构
  19. 无所不能的Python竟然没有一个像样的定时器?试试这个!
  20. NLP中的attention机制总结

热门文章

  1. C/C++ - http协议发送字段,文件,单个和多张图片
  2. FPGA-VGA驱动Color Bar显示
  3. vlookup函数使用过程
  4. vue怎么使用eval_eval()的使用和兼容性问题
  5. [技巧]WIN10笔记本生成电池损耗报表,与笔记本电池损耗恢复方法
  6. 《tkinter实用教程二》tkinter的子模块ttk
  7. 博尔顿大学介绍让学生们在9月重返校园的创新措施
  8. 生物信息学反卷积论文阅读
  9. IP地址冲突问题的解决方法
  10. 脑瘫患儿家庭的森森林林双包胎赴京演出圆满成功!