如何使用Arduino和AD9833构建信号发生器

发布者:艺泉阁最新更新时间:2023-03-24 来源: elecfans关键字:Arduino  AD9833  信号发生器 手机看文章 扫描二维码
随时随地手机看文章

  如果您是像我这样想要调整不同电子电路的电子爱好者,那么拥有一个像样的函数发生器有时是必不可少的。但是拥有一个是个问题,因为这样的基本设备可能要花一大笔钱。构建自己的测试设备不仅更便宜,而且是提高知识的好方法。


  因此,在本文中,我们将使用 Arduino 和 AD9833 DDS 函数发生器模块构建一个简单的信号发生器,它可以在输出端产生最大频率为 12 MHz 的正弦波、方波和三角波。最后,我们将在示波器的帮助下测试输出频率。

  什么是 DDS 函数发生器?

  顾名思义,函数发生器是一种可以通过设置输出特定频率的特定波形的设备。例如,假设您有一个 想要测试输出频率响应的LC 滤波器,您可以在函数发生器的帮助下轻松做到这一点。您需要做的就是设置所需的输出频率和波形,然后您可以调低或调高它以测试响应。这只是一个例子,随着列表的继续,你可以用它做更多的事情。


  DDS 代表直接数字合成。它是一种波形发生器,使用数模转换器(DAC) 从头构建信号。此方法专门用于生成正弦波。但是我们使用的IC可以产生方波或三角波信号。DDS 芯片内部发生的操作是数字的,因此它可以非常快速地切换频率,也可以非常快速地从一个信号切换到另一个信号。该设备具有良好的频率分辨率和宽频谱。


  了解 AD9833 函数发生器 IC 的工作原理

  我们项目的核心是由模拟设备设计和开发的AD9833可编程波形发生器 IC。它是一种低功耗、可编程波形发生器,能够产生最大频率为 12 MHz 的正弦波、三角波和方波。这是一款非常独特的 IC,只需一个软件程序即可改变输出频率和相位。它有一个 3 线 SPI 接口,这就是为什么与这个 IC 通信变得非常简单和容易的原因。该IC的功能框图如下所示。

poYBAGLriFOABgWRAAIS6vITucU464.png

  该IC的工作非常简单。如果我们看一下上面的功能框图,我们会发现我们有一个相位累加器,它的工作是存储从 0 到 2π 的所有可能的正弦波数字值。接下来,我们有 SIN ROM,其工作是将相位信息转换为以后可以直接映射到幅度的信息。SIN ROM 使用数字相位信息作为查找表的地址,并将相位信息转换为幅度。最后,我们有一个 10 位数模转换器,它的工作是从 SIN ROM 接收数字数据并将其转换为相应的模拟电压,这就是我们从输出中得到的电压。在输出端,我们还有一个开关,只需一点软件代码就可以打开或关闭它。我们将在本文后面讨论。AD9833 数据表,您也可以查看它以获取更多信息。


  构建基于 AD9833 的函数发生器所需的组件

  下面列出了构建基于 AD9833 的函数发生器所需的组件,我们使用非常通用的组件设计了这个电路,这使得复制过程非常容易。

  Arduino 纳米 - 1

  AD9833 DDS 函数发生器 - 1

  128 X 64 OLED 显示屏 - 1

  通用旋转编码器 - 1

  DC 桶形千斤顶 - 1

  LM7809 稳压器 - 1

  470uF 电容 - 1

  220uF 电容 - 1

  104pF 电容 - 1

  10K 电阻 - 6

  轻触开关 - 4

  螺丝端子 5.04mm - 1

  女头 - 1

  12V 电源 - 1

  基于 AD9833 的函数发生器 - 原理图

  AD9833 和基于 Arduino 的函数发生器的完整电路图如下所示。

poYBAGLriEyAHof3AAIN3pB44Qo246.png

  我们将使用带有 Arduino 的 AD9833来生成我们想要的频率。在本节中,我们将借助原理图解释所有细节;让我简要概述一下电路发生的情况。让我们从AD9833 模块开始。 AD9833模块为函数发生器模块,按照原理图与Arduino连接。为了给电路供电,我们使用了 LM7809 稳压器 IC,它带有一个不错的去耦电容,这是必要的,因为电源噪声会干扰输出信号,从而导致不需要的输出。与往常一样,Arduino 是这个项目的大脑。为了显示设定频率和其他有价值的信息,我们连接了一个 128 X 64 OLED 显示模块。为了改变频率范围,我们使用了三个开关。第一个将频率设置为 Hz,第二个将输出频率设置为 KHz,第三个将频率设置为 MHz,我们还有另一个按钮可用于启用或禁用输出。最后,我们有旋转编码器,我们必须连接一些上拉电阻,否则这些开关将不起作用,因为我们正在检查池方法上的按钮按下事件。旋转编码器用于改变频率,旋转编码器内部的轻触开关用于选择设定的波形。

pYYBAGLriEiAbgB8AAhZvWrzqrs594.png

  基于 AD9833 的函数发生器 - Arduino 代码

  此项目中使用的完整代码可在此页面底部找到。添加所需的头文件和源文件后,应该可以直接编译Arduino文件了。您可以从下面给出的链接下载ad9833 Arduino 库和其他库,或者您可以使用板管理器方法安装库。


  ino中的代码说明。文件如下。首先,我们首先包含所有必需的库。AD9833 DDS 模块库首先是 OLED 库,我们的一些计算需要数学库。


  ino中的代码说明。文件如下。首先,我们首先包含所有必需的库。AD9833 DDS 模块库首先是 OLED 库,我们的一些计算需要数学库。


#include  // AD9833 模块库

#include  // OLED 线库

#include  // OLED 支持库

#include  // OLED 库

#include  // 数学库

 

接下来,我们为按钮、开关、旋转编码器和 OLED 定义所有必要的输入和输出引脚。


#define SCREEN_WIDATA_PINH 128 // OLED 显示宽度(以像素为单位)

#define SCREEN_HEIGHT 64 // OLED 显示高度,以像素为单位

#define SET_FREQUENCY_HZ A2 // 以Hz为单位设置频率的按钮

#define SET_FREQUENCY_KHZ A3 // 以 Khz 为单位设置频率的按钮

#define SET_FREQUENCY_MHZ A6 // 以 Mhz 为单位设置频率的按钮

#define ENABLE_DISABLE_OUTPUT_PIN A7 // 启用/禁用输出的按钮

#define FNC_PIN 4 // AD9833 模块需要的 Fsync

#define CLK_PIN 8 // 编码器的时钟引脚

#define DATA_PIN 7 // 编码器的数据引脚

#define BTN_PIN 9 // 编码器上的内部按钮

 

此后,我们定义了此代码中所需的所有必要变量。首先,我们定义一个整数变量计数器来存储旋转编码器的值。接下来的两个变量clockPin和clockPinState存储理解编码器方向所需的引脚状态。我们有一个时间变量来保存当前的定时器计数器值,这个变量用于按钮去抖动。接下来,我们有一个无符号长变量moduleFrequency,它保存了计算的频率,它将被应用。接下来,我们有debounce delay。可以根据需要调整此延迟。接下来,我们有三个布尔变量set_frequency_hz,set_frequency_Khz和 set_frequency_Mhz 这三个变量用于确定模块的当前设置。我们将在本文后面更详细地讨论它。接下来,我们有存储输出波形状态的变量,默认输出波形是正弦波。最后,我们有encoder_btn_count变量,它保存用于设置输出波形的编码器按钮计数。


整数计数器 = 1;// 如果旋转编码器转动,此计数器值将增加或减少

整数时钟引脚;// 旋转编码器使用的引脚状态占位符

整数时钟引脚状态;// 旋转编码器使用的引脚状态占位符

无符号长时间 = 0; // 用于去抖动

无符号长模块频率;//用于设置输出频率

长时间去抖 = 220; // 去抖动延迟

布尔 btn_state; // 用于启用 AD98333 模块的禁用输出

布尔 set_frequency_hz = 1; // AD9833模块的默认频率

bool set_frequency_khz;

bool set_frequency_mhz;

字符串 waveSelect = "SIN"; // 模块的启动波形

int 编码器_btn_count = 0; // 用于检查编码器按钮是否按下

接下来,我们有两个对象,一个用于 OLED 显示器,另一个用于 AD9833 模块。

Adafruit_SSD1306 显示(SCREEN_WIDATA_PINH,SCREEN_HEIGHT,&Wire,-1);

AD9833 gen(FNC_PIN);

 

接下来,我们有我们的setup()函数,在该 setup 函数中,我们首先启用 Serial 进行调试。我们借助begin()方法初始化 AD9833 模块。接下来,我们将所有分配的旋转编码器引脚设置为输入。而我们将时钟引脚的值存储在clockPinState变量中,这是旋转编码器的必要步骤。


接下来,我们将所有按钮引脚设置为输入,并在display.begin()方法的帮助下启用 OLED 显示,我们还使用if 语句检查是否有任何错误。完成后,我们清除显示并打印启动启动画面,我们添加 2 秒的延迟,这也是启动画面的延迟,最后,我们调用update_display()函数清除屏幕并更新再次显示。update_display()方法的细节将在本文后面讨论。


无效设置(){

  序列号.开始(9600);// 启用串行@9600 波特

  gen.Begin(); // 这必须是声明 AD9833 对象后的第一个命令

  pinMode(CLK_PIN,输入);// 将引脚设置为输入

  pinMode(DATA_PIN,输入);

  pinMode(BTN_PIN,INPUT_PULLUP);

  clockPinState = digitalRead(CLK_PIN);

  pinMode(SET_FREQUENCY_HZ, INPUT);// 将引脚设置为输入

  pinMode(SET_FREQUENCY_KHZ,输入);

  pinMode(SET_FREQUENCY_MHZ,输入);

  pinMode(ENABLE_DISABLE_OUTPUT_PIN,输入);

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // 地址 0x3D 为 128x64

    Serial.println(F("SSD1306 分配失败"));

    为了 (;;);

  }

  display.clearDisplay(); //清屏

  display.setTextSize(2); // 设置文本大小

  display.setTextColor(白色);//设置液晶颜色

  display.setCursor(30, 0); // 设置光标位置

  display.println("AD9833"); // 打印这个文本

  display.setCursor(17, 20); // 设置光标位置

  display.println("函数"); // 打印这个文本

  display.setCursor(13, 40); // 设置光标位置

  display.println("生成器"); // 打印这个文本

  显示.显示();// 更新显示

  延迟(2000);// 延迟 2 秒

  更新显示();// 调用 update_display 函数

}


接下来,我们有我们的loop()函数,所有主要功能都写在循环部分。


首先,我们读取旋转编码器的时钟引脚并将其存储在我们之前声明的 clockPin 变量中。接下来,在if语句中,我们检查 pin 的先前值和 pin 的当前值是否相似,我们还检查 pin 的当前值。如果全部为真,我们检查数据引脚,如果为真,则表示编码器逆时针旋转,我们在counter--命令的帮助下减少计数器值。否则,我们使用counter ++命令增加计数器值。最后,我们用另一个if语句将最小值设置为 1。接下来,我们用当前的clockPin更新clockPinState未来使用的价值。


无效循环()

{

  clockPin = digitalRead(CLK_PIN);

  if (clockPin != clockPinState && clockPin == 1) {

    if (digitalRead(DATA_PIN) != clockPin) {

      柜台  - ;

    }

    别的 {

      counter ++;// 编码器顺时针旋转,因此递增

    }

    如果 (计数器 < 1 ) 计数器 = 1;

    Serial.println(计数器);

    更新显示();

  }

 


接下来,我们有我们的代码来检测按钮按下。在本节中,我们借助一些嵌套的 if 语句来检测编码器内部的按钮,if (digitalRead(BTN_PIN) == LOW && millis() - time > denounce), 在此语句中,我们首先检查按钮是否引脚是否为低电平,如果它为低电平,则它被按下。然后我们再次检查带有去抖动延迟的计时器值,如果两个语句都为真,那么我们声明它是一个成功的按钮按下动作,如果这样我们增加encoder_btn_count值。接下来,我们声明另一个 if 语句将最大计数器值 设置为 2,我们需要它,因为我们正在使用它来设置输出波形。连续三个 if 语句就是这样做的,如果值为 0,则选择正弦波,如果为 1,则为方波,如果值为 2,则为三角波。在所有这三个 if 语句中,我们使用 update_display() 函数更新显示。 最后,我们用当前的计时器计数器值更新时间变量。


 


//如果我们检测到一个LOW信号,按钮被按下

  if ( digitalRead(BTN_PIN) == LOW && millis() - time > debounce) {

    编码器_btn_count++;// 增加值

    if (encoder_btn_count > 2) // 如果值大于 2 将其重置为 0

    {

      编码器_btn_count = 0;

    }

    if (encoder_btn_count == 0) { // 如果值为 0 则选择正弦波

      波选择=“罪”;// 用 sin 值更新字符串变量

      更新显示();// 更新显示

    }

    if (encoder_btn_count == 1) { // 如果值为 1 则选择方波

      波选择 = "SQR"; // 用 SQR 值更新字符串变量

      更新显示();// 更新显示

    }

    if (encoder_btn_count == 2) { // 如果值为 1 则选择三角波

      波选择=“三”;// 用 TRI 值更新字符串变量

      update_display();// 更新显示

    }

    时间=毫秒();// 更新时间变量

  }

 


接下来,我们定义所有必要的代码,这些代码需要设置所有具有去抖动延迟的按钮。由于按钮连接到 Arduino 的模拟引脚,我们使用模拟读取命令来识别按钮按下,如果模拟读取值低于 30,则我们检测其成功按下按钮,我们等待 200 毫秒检查它是实际的按钮按下还是仅是噪音。 如果此陈述为真,我们为布尔变量分配用于设置函数发生器的 Hz、Khz 和 Mhz 值的值。接下来,我们更新显示并更新时间变量。我们为与 Arduino 连接的所有四个按钮执行此操作。


 


  if (analogRead(SET_FREQUENCY_HZ) < 30 && millis() - time > debounce) {   

    set_frequency_hz = 1; //更新布尔值

    设置频率khz = 0;

    set_frequency_mhz = 0;

    update_display();// 更新显示

    time = millis();// 更新时间变量

  }

  if (analogRead(SET_FREQUENCY_KHZ) < 30 && millis() - time > debounce){

    set_frequency_hz = 0; //更新布尔值

    set_frequency_khz = 1;

    set_frequency_mhz = 0;

    模块频率 = 计数器 * 1000;

    update_display();// 更新显示

    time = millis();// 更新时间变量

  }

  if (analogRead(SET_FREQUENCY_MHZ) < 30 && millis() - time > debounce ) { // 使用去抖延迟检查模拟引脚

    set_frequency_hz = 0; //更新布尔值

    设置频率khz = 0;

    set_frequency_mhz = 1;

    模块频率 = 计数器 * 1000000;

    update_display();// 更新显示

    time = millis();// 更新时间变量

  }

  if (analogRead(ENABLE_DISABLE_OUTPUT_PIN) < 30 && millis() - time > debounce ) {// 使用去抖延迟检查模拟引脚

    btn_state = ! btn_state; // 反转按钮状态

    gen.EnableOutput(btn_state); // 根据按钮状态启用/禁用函数发生器的输出

    update_display();// 更新显示

    time = millis();// 更新时间变量

  }

}

 


最后,我们有了update_display()函数。在此功能中,我们所做的不仅仅是更新此显示器,因为显示器的某些部分无法在 OLED 中更新。要更新它,您必须使用新值重新绘制它。这使得编码过程变得更加困难。


在这个函数中,我们从清除显示开始。接下来,我们设置所需的文本大小。此后,我们设置光标并使用display.println("Function Function"); 打印函数生成器;命令。在display.setCursor(0, 20) 函数  的帮助下, 我们再次将文本大小设置为 2,将光标设置为 (0,20 ) 。


这是我们打印波浪信息的地方。


 


display.clearDisplay(); // 首先清除显示

  display.setTextSize(1); //设置文字大小

  display.setCursor(10, 0); // 设置光标位置

  display.println("函数生成器"); //打印文本

  display.setTextSize(2);//设置文字大小

  display.setCursor(0, 20);//设置光标位置

 


接下来,我们检查布尔变量以获取频率详细信息并更新moduleFrequency变量中的值。我们对 Hz、kHz 和 MHz 值执行此操作。接下来,我们检查waveSelect变量并确定选择了哪个波。现在,我们有了设置波形类型和频率的值。


 


if (set_frequency_hz == 1 && set_frequency_khz == 0 && set_frequency_mhz == 0 ) { // 检查设置频率的按钮是否被按下

    模块频率 = 计数器;//用当前计数器值更新moduleFrequency变量

  }

  if (set_frequency_hz == 0 && set_frequency_khz == 1 && set_frequency_mhz == 0 ) { // 检查是否按下了设置 KHz 频率的按钮

    moduleFrequency = counter * 1000;//用当前计数器值更新 moduleFrequency 变量,但我们乘以 1000 将其设置为 KHZ

  }

  if (set_frequency_hz == 0 && set_frequency_khz == 0 && set_frequency_mhz == 1) { // 检查是否按下了以MHz为单位的频率设置按钮

    模块频率 = 计数器 * 1000000;

    如果(模块频率> 12000000)

    {

      模块频率 = 12000000;// 不要让频率超过 12Mhz

      计数器 = 12;

    }

  }


  if (waveSelect == "SIN") { // 正弦波被选中

    display.println("SIN");

    gen.ApplySignal(SINE_WAVE, REG0, moduleFrequency);

[1] [2] [3]
关键字:Arduino  AD9833  信号发生器 引用地址:如何使用Arduino和AD9833构建信号发生器

上一篇:如何使用示波器测试电池的瞬态能量
下一篇:示波器眼图如何分辨信号质量

推荐阅读最新更新时间:2024-11-20 12:23

基于单片机的信号发生器仿真设计
这是我做的信号发生器课设,用proteus画的原理图,keil4.1编写的C语言。 仿真原理图如下 单片机源程序如下: #include reg52.h #define uchar unsigned char #define uint unsigned int #define DAdata P0 //DA数据端口 sbit DA_S1=P2^0; sbit DA_S2=P2^1; sbit key =P3^2; uchar wavecount; //波形波码计数标志 uchar THtemp,TLtemp;//传递频率的中间变量 uchar judge=1; //用于方波函数,作标志 uchar waveform;
[单片机]
基于单片机的<font color='red'>信号发生器</font>仿真设计
如何用信号发生器对收音机进行统调
一、电路简介:电路如图 可以看出,信号发生器由两部分组成:一、由时基555及外围元件组成音频信号发生器;二、用9014作高频振荡管,产生高频载波,通过音频信号的调制后发射出去,也可以接入MP3音频信号,播放乐曲,这在白天很难收到中波信号的情况下,代替电台,使学生收音机也能收到信号。 这信号发生器可输出中频信号465千周左右的频率,以及高频530千周至1700千周的信号,幅射距离约2-3米,它完全可以满足中波收音机的调试要求。 1、电源:为移动信号发生器方便,本机只采用直流电源,用一块手机电池供电(电源定为4V),也可用3节1.5V小电池供电。 红发光管用作电源指示。 2、时基555及外围元件产生音频信号从③脚输出,
[嵌入式]
如何用<font color='red'>信号发生器</font>对收音机进行统调
发铃信号发生器原理图
发铃信号发生器原理图:
[模拟电子]
发铃<font color='red'>信号发生器</font>原理图
如何预防信号发生器“生病”?
信号发生器是一种能提供各种频率、波形和输出电平电信号的设备。在测量各种电信系统或电信设备的振幅特性、频率特性、传输特性及其它电参数时,以及测量元器件的特性与参数时,用作测试的信号源或激励源。信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。 信号发生器的使用已经非常普遍,那么使用过程中就难免会出现各种故障。西安安泰测试维修中心根据多年维修经验总结得知信号发生器常见故障如下: 1、电源故障:不能正常开机 2、输出端故障:阻抗异常;无信号;信号幅度异常 3、显示故障:花屏;黑屏 4、按键故障:按键无反应;调节旋钮无响应 5、接口故障:不认存储介质;不能与控制系统联机 6、其他使用问题等。 那么如何避免信号
[测试测量]
如何预防<font color='red'>信号发生器</font>“生病”?
带有Arduino Nano的SDS011构建空气质量分析仪
  空气污染是许多城市的主要问题,空气质量指数每天都在恶化。根据世界卫生组织的报告,由于空气中存在的有害颗粒的影响而过早死亡的人比死于车祸的人多。根据环境保护署 (EPA) 的说法,室内空气的毒性可能是室外空气的 2 到 5 倍。因此,我们在这里构建了一个设备,通过测量空气中的 PM2.5 和 PM10 颗粒来监测空气质量。   我们之前使用 MQ135 气体传感器进行空气质量监测,使用夏普 GP2Y1014AU0F 传感器测量空气中的灰尘密度。这次我们使用 带有 Arduino Nano 的 SDS011 传感器来构建空气质量分析仪。SDS011传感器可以计算空气中PM2.5和PM10颗粒物的浓度。在这里,实时 PM2.5
[测试测量]
带有<font color='red'>Arduino</font> Nano的SDS011构建空气质量分析仪
基于DAC0832和AT89S52的信号发生器设计
    信号发生器是一种常用的信号源,广泛应用于电子电路、自动控制系统和教学实验等领域。信号的产生有模拟电路、专用硬件和软件产生等方法。采用模拟电路搭建函数信号发生器,可同时产生方波、三角波、正弦波,但不能产生任意波形,存在波形质量差、控制难、可调范围小,电路复杂和体积大等缺点,且频率调节不方便。专用硬件方法产生的信号频率分辨率高、稳定性好、在线调整方便,如目前在通讯系统中应用广泛的直接数字频率合成(DDS)技术,例如AD9854是一种典型的信号产生方法,但是价格昂贵。     利用单片机通过程序设计方法产生低频信号,其频率底线较低,具有线路简单、结构紧凑、体积小、价格低廉、频率稳定度高、抗干扰能力强、用途广泛等优点,且如需要产生新
[单片机]
基于DAC0832和AT89S52的<font color='red'>信号发生器</font>设计
Arduino Leonardo最终发布低价新pin layout
去年九月,我们在Maker Faire上得以一睹新的简化版的 Arduino Leonardo 的真容。然而承诺当年十月底的发货日期却因为产品具体化失败而被迫搁置了。 最终,Massimo Banzi揭露了瘦身版的微控制器, 现在各大网上零售店均有出售 。 Leonardo的新引脚布局,人称R3,将会变成Arduino主板的标配。这对机箱制造商来说是一个天大的好消息,因为他们今后只需要设计制造一个扩展就可以和整个产品线相配。另一个消息是,他们对转换USB至串行通信处理器的电路进行了整合。 当然最棒的还是价格,Leonardo,带有header的,仅售25美元,比Uno便宜整整10美刀呢!不带header的只要22.5美元。
[嵌入式]
<font color='red'>Arduino</font> Leonardo最终发布低价新pin layout
ATMega328P-PU芯片Arduino最小系统实验
业余折腾了一段时间的Arduino,一时兴起想尝试下在面包板上实现一个最小系统,所以从某宝上买了ATMega328P-PU芯片和USBtinyISP编程器。(这个编程器有3.0版本的,当时不懂没注意,买到的是2.0,不过不影响用来做这个实验。卖家给的驱动不灵,最后还是从https://learn.adafruit.com/usbtinyisp/drivers 下载驱动包解决) 面包板上按这个图插好元件。虚线的地方暂时先不要接线,面包板上也不要接通任何外部电源!!! 然后将编程器6针连接器中的每一根针都引入328p的对应引脚上,千万不能弄错。 连接器的VCC直接接入328p的pin7,GND接面包板上布置的地。 连接器的RS
[单片机]
ATMega328P-PU芯片<font color='red'>Arduino</font>最小系统实验

推荐帖子

微波器件与技术研究发展中心空间器件部成立
2006年5月9日上午,微波器件与技术研究发展中心空间器件部成立大会在中心会议室召开。微波器件中心主任刘濮鲲主持会议,阴和俊所长、孟宪民副所长、部分管理部门负责人、中心总工程师和副主任,以及中心原空间行波管放大器项目组和相关工艺人员近60人出席了会议。首先,由微波器件中心主任刘濮鲲宣布微波器件中心空间器件部正式成立,并宣布由微波器件中心副主任苏小保兼任空间器件部主任。此外,刘主任还根据空间行波管放大器的国家需求、当前任务和发展前景等方面阐述了成立空间器件部的必要性和重要性。接着
JasonYoo RF/无线
LEM电流电压传感器
瑞士LEM互感器、LEM电流互感器、LEM电涌保护器、LEM传感器、LEM电压互感器、LEM电量传感器、LEM无线电能表LEM是全球电量传感器的知名制造者,也是电量传感器领域的领导者。LEM集团全球拥有多家公司,销售办事处遍布全球。其中瑞士日内瓦、中国北京及日本的町田作为LEM的全球三大生产中心。LEMSA是LEM总部在瑞士的研发中心,主要研发闭环原理传感器及新产品规划及预研;LEMJAPAN是LEM日本的研发中心,主要研发开环原理传感器;LEM拥有先进的电力电子研发能力,拥有
duxiang006 嵌入式系统
测评汇总:TI LAUNCHXL-CC1352P-4
活动详情:https://bbs.eeworld.com.cn/elecplay/content/170测评汇总(更新时间:2021年7月30日):@MianQi【LAUNCHXL-CC1352P-4】-0:开箱帖【LAUNCHXL-CC1350-4】-1:在Ubuntu20.04上安装CCS【LAUNCHXL-CC1350-4】-2:这个跟之前的想象有些一样有些不一样【LAUNCHXL-CC1350-4】-3:搭建开发环境【LA
okhxyyo RF/无线
[求助]关于cc2430 加载密钥的问题
cc2430给的样例程序上,加载IV和加密数据的时候,都会给他们分配DMA通道,把IV和加密数据传输到AES处理器,但是加载KEY的时候,却没有给他一个DMA通道,KEY则是直接就到AES处理器了。难道加载KEY时不需要通过DMA通道把KEY传给AES处理器么?否则怎么让KEY进入AES模块呢?还有一个问题是,如果从外部输入KEY,是否需要分配一个DMA通道,把KEY送到AES加密模块?关于cc2430加载密钥的问题BYTEkey={0x01,0x02,0x03,
zhengkangshan 嵌入式系统
高手进来帮个忙
有没有哪个大虾做过pt100的温度测量的啊?可以给些参考资料我看看不?元器件89s51+1602+pt100精度0.5其他没什么要求了重申一下问题就是,要一个pt100的前置电路(上网找了很久都没有找到一个说的明白的),还有就是最好能给个pt100+stc8952的实例。还有就是经过ad得出的数据是不是2进制的(以前没有做过ad方面的,所以顺便问一下)· 高手进来帮个忙利用启点开发板可以很容易的完成LCD显示,具体如下:1602采用标准的14脚接口,其中:第1脚:VSS
ap0505525 单片机
【2024 DigiKey创意大赛】- 基于毫米波雷达的生命体征检测及健康监护系统 - 环境搭建1
##【2024DigiKey创意大赛】-基于毫米波雷达的生命体征检测及健康监护系统-环境搭建-Node.js与Python的服务器开发环境搭建由于大赛的项目需要设计软件方面,下面是一份安装Node.js、Python环境以及通过PHPStudy安装MySQL数据库环境的简易指南。请注意,由于软件版本会不断更新,具体步骤可能会有所变化,请参考官方文档获取最新信息。###1.安装Node.js####步骤:1.访问Node.js官方网站:http
zygalaxy DigiKey得捷技术专区
小广播
最新测试测量文章
换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved