Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 该代码使用Arduino Uno生成正弦波是否有效/合理?_C_Timer_Arduino_Interrupt - Fatal编程技术网

C 该代码使用Arduino Uno生成正弦波是否有效/合理?

C 该代码使用Arduino Uno生成正弦波是否有效/合理?,c,timer,arduino,interrupt,C,Timer,Arduino,Interrupt,注意:我省略了其他两个阶段(V和W)的代码,对于示例来说这不是必需的 我敢肯定,我处理这种“开”和“关”时间的方式不是一种有效的方式 我想使用查找表实现“开”和“关”脉动。计时器应与表格的当前选定值进行比较,如果该值通过,则切换输出 问题:我认为我处理计时器“错误”。我没有得到正确数量的脉冲(我的理解是,我应该得到与数组中的值一样多的脉冲,在本例中为300+)。看着示波器,我注意到只有几个脉冲 使用“输出比较寄存器”会更好吗 你还有什么建议/想法 bool posTOneg=true;//用于从

注意:我省略了其他两个阶段(V和W)的代码,对于示例来说这不是必需的

我敢肯定,我处理这种“开”和“关”时间的方式不是一种有效的方式

我想使用查找表实现“开”和“关”脉动。计时器应与表格的当前选定值进行比较,如果该值通过,则切换输出

问题:我认为我处理计时器“错误”。我没有得到正确数量的脉冲(我的理解是,我应该得到与数组中的值一样多的脉冲,在本例中为300+)。看着示波器,我注意到只有几个脉冲

使用“输出比较寄存器”会更好吗

你还有什么建议/想法

bool posTOneg=true;//用于从正变为负的变量。”一开始是真的。
/////引脚的配置/////
int igbt_高_=11;
int igbt_高_v=10;
int igbt_高_w=9;
int igbt_低_=6;
int igbt_低_v=5;
int igbt低w=3;
/////查找表/////
int UsinPWM[]={1,2,5,7,10,12,15,17,19,22,24,27,30,32,34,37,39,42,
44、47、49、52、54、57、59、61、64、66、69、71、73、76、78、80、83、85、88、90、92、94、97、99、//42个字
101,103,106,108,110,113,115,117,119,121,124,126,128,130,132,134,136,138,140,142,144,146,
148,150,152,154,156,158,160,162,164,166,168,169,171,173,175,177,178,180,182,184,185,187,188,190,192,193,      // 90
195,196,198,199,201,202,204,205,207,208,209,211,212,213,215,216,217,219,220,221,222,223,224,225,226,227,
228,229,230,231,232,233,234,235,236,237,237,238,239,240,240,241,242,242,243,243,244,244,245,245,246,246,      // 142
247,247,247,248,248,248,248,249,249,249,249,249,250,250,250,250,249,249,249,249,249,248,
248,248,248,247,247,247,246,246,245,245,244,244,243,243,242,242,241,240,240,239,238,237,237,236,235,234,      // 190
233,232,231,230,229,228,227,226,225,224,223,222,221,220,219,217,216,215,213,212,211,209,208,207,205,204,
202,201,199,198,196,195,193,192,190,188,187,185,184,182,180,178,177,175,173,171,169,168,166,164,162,160,      // 242
158,156,154,152,150,148,146,144,142,140,138,136,134,132,130,128,126,124,121,119,117,115,113,110,108,106,
103,101,99,97,94,92,90,88,85,83,80,78,76,73,71,69,66,64,61,59,57,54,52,49,47,44,42,39,37,34,32,30,            // 300
27,24,22,19,17,15,12,10,7,5,2,1};                                                                             // 312
/////数组的大小/////
int sizeU=sizeof(UsinPWM)/sizeof(int);//PWM阵列的变量(大小)
/////偏移120度/////
int indexU=0;//扎勒变量
/////相位U的功能(正半周期和负半周期)/////
void posHalbU(国际一级)
{
if(TCNT0
下面是我生成的结果。大约产生了20个脉冲,这些脉冲是周期性产生的


使用
for循环
自动索引正弦数组。使用analogWrite()以专用时间间隔将数据写入PWM引脚。时间间隔x数组大小=正弦周期


输出将看起来很糟糕。。。仅一个快速变化的PWM信号延伸0-5 V。经过适当滤波后,将神奇地出现正弦波。

使用
for loop
自动索引正弦阵列。使用analogWrite()以专用时间间隔将数据写入PWM引脚。时间间隔x数组大小=正弦周期


输出将看起来很糟糕。。。只是一个快速变化的PWM信号,延伸0-5 V。经过适当过滤后,正弦波会神奇地出现。

我的直觉反应是使用sin函数并将其输出到模拟引脚上的缩放值。你打算用它做什么?我没有看到任何定时器初始化代码。我触发了6个开关,因此得到了一个电流。根据脉冲的大小,我得到一个正弦波
此图显示了我需要的内容。我想生成蓝色曲线,硬件配置的方式会给我红色正弦wave@EugeneSh:,它可能已经设置好了。作为第一个过程,它的行为似乎取决于主循环运行的速度。我错了吗?还是某种调制?此外,与直接数字端口输出寄存器写入相比,digitalWrite()速度非常慢。每个周期有3*312=936次对digitalWrite()的调用。我的直觉反应是使用sin函数并将其输出到模拟管脚上。你打算用它做什么?我没有看到任何计时器初始化代码。@I触发器