Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
arduino是否适合高频应用?_Arduino - Fatal编程技术网

arduino是否适合高频应用?

arduino是否适合高频应用?,arduino,Arduino,我可以将arduino用于频率为4 MHz的应用程序吗 我需要创建一个具有此频率的时钟,并在上升沿和下降沿上发送和接收数据。这不是一个普通的SPI接口,我有自己的条件,所以我需要手动操作 如果不合适,技术上是否可行?使用arduino Mega 2560可产生的最大PWM为62500 Hz。我认为你无法超越这一点。 您可以使用内部SPI,因此对于16MHz振荡器,您可以使用从16MHz到(16/128)MHz的频率 您可以使用定时器1(ATMega328和ATmega32U4)以4MHz的频率

我可以将arduino用于频率为4 MHz的应用程序吗

我需要创建一个具有此频率的时钟,并在上升沿和下降沿上发送和接收数据。这不是一个普通的SPI接口,我有自己的条件,所以我需要手动操作


如果不合适,技术上是否可行?

使用arduino Mega 2560可产生的最大PWM为62500 Hz。我认为你无法超越这一点。


您可以使用内部SPI,因此对于16MHz振荡器,您可以使用从16MHz到(16/128)MHz的频率

您可以使用定时器1(ATMega328和ATmega32U4)以4MHz的频率进行PWM输出,以下是UNO/NANO(ATMega328)的示例:

提示:您可以将其他IRC1和OCR1值用于其他频率和占空比。频率=8000000/IRC1

示例:IRC1=4,OCR1A=1,OCR1B=3

将输出如下所示的PWM:

8000000/IRC1=8000000/4=200000Hz=2MHz的频率

1个时钟周期高(OCRA1=1),3个时钟周期低(OCR1B=3)

OCR1A/IRC1的占空比=1/4=25%

注:
任何使用TIMER1的Arduino代码在此之后都不会工作(或者工作不稳定)。Arduino使用TIMER1作为伺服库。

请将相关部分添加到答案中,仅链接的答案并不受欢迎,因为当链接目标被删除时,它们将变得无用。什么类型的Arduino?显然,您需要一个时钟周期频率高于4MHz的处理器。你能提供更多关于你的项目的细节吗?
    pinMode(10, OUTPUT); // Output pin
    // Set Timer1 to phase and frequency correct mode. NON-inverted mode
    TCCR1A = _BV(COM1A1) | _BV(COM1B1); 

    // Set prescaler to clk/1 (outputs from 122,072Hz to 4MHz
    TCCR1B = _BV(WGM13) | _BV(CS10);

    //ICR Register, which controls the PWM total pulse length
    ICR1 = 2; // value 2 makes pulse width = 2 clock cycles (with clk/1 prescaler)
    //OCR Registers, which control the PWM duty cycle.
    // OCR1A + OCR1B must be = IRC1.
    OCR1A = 1; // 1 pulse of the IRC1 total pulse length will be HIGH
    OCR1B = 1; // 1 pulse of the IRC1 total pulse length will be HIGH