Problem with HamiltonianProblem in Differential

That’s not one of the allowed forms.

Define a physical system by its Hamiltonian function `H(p, q, param)` or the function pair
`dp = -∂H/∂q` and `dq = ∂H/∂p`.

You’re missing param. The following works:

using DifferentialEquations, DiffEqPhysics

struct Pendulum
    m
    g
    l
    ϕ₀
    dϕ₀
end

function (pen::Pendulum)(p, q, param) #hamiltonian of a pendulum
    p^2 / (2 * pen.m * (pen.l)^2) - pen.m * pen.g * pen.l * cos(q)
end

function startvalues(p::Pendulum)
    q₀ = p.ϕ₀
    p₀ = p.dϕ₀ * p.m * (p.l)^2
    q₀, p₀
end

function simulate(p::Pendulum, tspan)
    q₀, p₀ = startvalues(p)
    prob = HamiltonianProblem(p, p₀, q₀, tspan)
    sol = solve(prob, Tsit5())

    sol
end

p = Pendulum(1.0, 9.81, 1.0, pi/2, 0.0)
tspan = (0.0, 1.0)
simulate(p, tspan)

(also notice the fix to the p,q order)

Note that this now has a better error message:

ERROR: All methods for the Hamiltonian `H` had too few arguments. A
Hamiltonian `H` must define either `H(p, q, param)` or `H(p, q, param, t)`. This error
can be thrown if you define an Hamiltonian for example as `H(p, q)`.
Note that `param` must be in the arguments list even if it's not used.
For more information on the required number of arguments for the function
you were defining, consult the documentation for the `HamiltonianProblem`.

Offending function: f
Methods:
# 1 method for callable object:
[1] (pen::Pendulum)(q, p) in Main at d:\OneDrive\Computer\Desktop\test.jl:120

Stacktrace:
 [1] HamiltonianProblem{false}(H::Pendulum, p0::Float64, q0::Float64, tspan::Tuple{Float64, Float64}, param::Nothing; kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
   @ DiffEqPhysics C:\Users\accou\.julia\dev\DiffEqPhysics\src\hamiltonian.jl:122
 [2] HamiltonianProblem
   @ C:\Users\accou\.julia\dev\DiffEqPhysics\src\hamiltonian.jl:115 [inlined]
 [3] #HamiltonianProblem#1
   @ C:\Users\accou\.julia\dev\DiffEqPhysics\src\hamiltonian.jl:95 [inlined]
 [4] HamiltonianProblem (repeats 2 times)
   @ C:\Users\accou\.julia\dev\DiffEqPhysics\src\hamiltonian.jl:93 [inlined]
 [5] simulate(p::Pendulum, tspan::Tuple{Float64, Float64})
   @ Main d:\OneDrive\Computer\Desktop\test.jl:132
 [6] top-level scope
   @ d:\OneDrive\Computer\Desktop\test.jl:140